Mysql 唯一索引是否具有与基本索引相同的优点
我正在中构建迁移,出于性能原因,我希望两个字段有一个索引,因为在这些字段上执行了多个连接 这两个字段同时也是唯一的,所以我需要一个唯一的约束索引。在laravel文档中,unique和index都位于同一节“index”下,所以我想知道它们在后台是否基本相同。唯一索引是否会自动为我提供索引性能优势 如果我设置了唯一约束索引Mysql 唯一索引是否具有与基本索引相同的优点,mysql,sql,laravel,eloquent,Mysql,Sql,Laravel,Eloquent,我正在中构建迁移,出于性能原因,我希望两个字段有一个索引,因为在这些字段上执行了多个连接 这两个字段同时也是唯一的,所以我需要一个唯一的约束索引。在laravel文档中,unique和index都位于同一节“index”下,所以我想知道它们在后台是否基本相同。唯一索引是否会自动为我提供索引性能优势 如果我设置了唯一约束索引 $table->unique(array('object_type', 'object_id')); 问题1)这是否与基本指数具有相同的效益 $table->
$table->unique(array('object_type', 'object_id'));
问题1)这是否与基本指数具有相同的效益
$table->index('object_type');
$table->index('object_id');
问题2:设置这些索引类型时,是否需要将引擎类型设置为InnoDB
Schema::create('my_table', function (Blueprint $table) {
$table->increments('id');
$table->string('object_type');
$table->unsignedInteger('object_id');
$table->engine = 'InnoDB';
$table->unique(array('object_type', 'object_id'));
});
首先,即使您正在使用Schema builder创建迁移,这些都是基于
mysql
和sql
的问题,因此我将它们标记为这样,您可能会得到一些更深刻的答案
关于你的问题:
1)否。如果要对字段建立单独的索引,还需要对其单独编制索引。您得到的组合唯一索引只有在与两个字段组合使用时才会起作用
2)如果您不想使用索引,则不必使用InnoDB。MyISAM仍然支持indexxes和uniques。特定查询的索引的性能优势取决于搜索参数(又称where子句) 一个包含object_type和object_id的索引(按此顺序)将有助于指定object_type的查询;或where子句中的对象类型和对象id。如果不提供对象类型,则没有帮助 根据where子句中相应列的存在情况,两个索引(一个在object_type上,另一个在object_id上)将分别提供帮助。如果where子句同时指定了object_type和object_id,那么值的特殊性将决定为查询选择两个索引中的哪一个