【发布时间】:2015-08-20 19:04:13
【问题描述】:
https://dev.mysql.com/doc/internals/en/optimizer-and-relations.html
文章说如果两个条件都被索引并且具有相同的连接类型,它使用首先创建的索引。
在某个索引具有更高基数的情况下,选择该索引作为驱动程序不是更好吗?不应该查询存储引擎吗?
如果不应该在这些情况下强制索引,如果我对基数有一个想法?
【问题讨论】:
-
如果我没记错的话,您的问题将属于第 2 步 - MySQL 会选择具有更好连接类型的索引,不是吗?如果一个索引更好,它将被选择而不是另一个。只有当索引具有相同的连接类型时,才会选择第一个。我在现实世界中从未见过使用更差的索引而不是更好的索引。然而,有趣的问题,+1,让我们看看其他人有什么要说的。
-
Join 类型指的是 mysql 的 join 类型。参考dev.mysql.com/doc/internals/en/…,据我了解。
-
我知道它指的是什么,我已阅读文档。因此,具有较高基数的索引具有更好的连接类型。因此,您的问题属于mysql文档解释的第2步,不是吗?
-
example select * from table where key_1 > X and key_2 > Y, 都是范围连接类型.. 不管基数如何。基数不影响连接类型。是吗?
-
您可以让非唯一索引产生
eq_ref,所以我会假设基数确实会影响更好索引的选择。
标签: mysql indexing cardinality