Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 唯一索引是否具有与基本索引相同的优点_Mysql_Sql_Laravel_Eloquent - Fatal编程技术网

Mysql 唯一索引是否具有与基本索引相同的优点

Mysql 唯一索引是否具有与基本索引相同的优点,mysql,sql,laravel,eloquent,Mysql,Sql,Laravel,Eloquent,我正在中构建迁移,出于性能原因,我希望两个字段有一个索引,因为在这些字段上执行了多个连接 这两个字段同时也是唯一的,所以我需要一个唯一的约束索引。在laravel文档中,unique和index都位于同一节“index”下,所以我想知道它们在后台是否基本相同。唯一索引是否会自动为我提供索引性能优势 如果我设置了唯一约束索引 $table->unique(array('object_type', 'object_id')); 问题1)这是否与基本指数具有相同的效益 $table->

我正在中构建迁移,出于性能原因,我希望两个字段有一个索引,因为在这些字段上执行了多个连接

这两个字段同时也是唯一的,所以我需要一个唯一的约束索引。在laravel文档中,unique和index都位于同一节“index”下,所以我想知道它们在后台是否基本相同。唯一索引是否会自动为我提供索引性能优势

如果我设置了唯一约束索引

$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,那么值的特殊性将决定为查询选择两个索引中的哪一个