Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.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_Performance_Indexing_Database Optimization - Fatal编程技术网

Mysql 在主键+;上创建多个索引是否有性能优势;外键?

Mysql 在主键+;上创建多个索引是否有性能优势;外键?,mysql,performance,indexing,database-optimization,Mysql,Performance,Indexing,Database Optimization,如果我有一个包含主键和外键的表,并且经常使用包含(…其中primary=n和foreign=x)的查询进行搜索,那么使用这两个键在MySQL中创建多个索引是否有性能优势 我知道它们都已经是索引了,但我不确定外键在包含在另一个表中时是否仍然被视为索引。例如,MySQL会转到主键,然后比较外键的所有值,直到找到正确的值,还是因为外键也是索引,它已经知道它在哪里了 更新:我使用的是InnoDB表。对于相等性比较,您无法在主键索引上获得改进(因为在这一点上,最多只有一行可以匹配) 访问路径为: 查看pr

如果我有一个包含主键和外键的表,并且经常使用包含
(…其中primary=n和foreign=x)
的查询进行搜索,那么使用这两个键在MySQL中创建多个索引是否有性能优势


我知道它们都已经是索引了,但我不确定外键在包含在另一个表中时是否仍然被视为索引。例如,MySQL会转到主键,然后比较外键的所有值,直到找到正确的值,还是因为外键也是索引,它已经知道它在哪里了


更新:我使用的是InnoDB表。

对于相等性比较,您无法在主键索引上获得改进(因为在这一点上,最多只有一行可以匹配)

访问路径为:

  • 查看primary=n的主键索引
  • 从表中获取单个匹配行
  • 使用表中的行检查任何其他条件

  • 如果您对主键进行范围扫描,并希望通过另一列缩小范围,则复合索引可能会有一定意义。

    这取决于所使用的存储引擎。一般来说,根据我的主观观察(我没有做过任何测试)-不,这样做没有好处。”例如,MySQL是否会转到主键,然后比较外键的所有值,直到找到正确的值,“:嗯,在那一点上,所有值都只有一行。基于您的解释,这对我来说非常有意义。谢谢你打断了我周一早上的大脑迷雾!