我有一个包含 8 列的混合数据类型(int、text、varchar 等)的表
此表只有一个对其进行操作的查询(SELECT),并且在该查询中它使用 4 个“AND”语句来过滤结果。
我的问题是:在这种情况下建立索引有哪些准则?
在我的例子中,读取时间比写入时间具有更高的优先级,所以我应该索引出现在 AND 子句中的所有列吗?我应该只索引整数吗?
最佳答案
对于一个查询,创建一个包含所有受影响的列的索引。
MySQL 的索引从左到右工作,这意味着如果您有一个包含以下列的表:
A varchar(255)
B varchar(50)
C int(11)
D datetime
KEY index (A,B,C,D)
上的索引意味着 MySQL 将从左到右查找查询中的列。如果您将它们全部包含在您的查询中,它将全部使用它们,但如果您只包含 A
和 B
,它将在应用其余部分之前使用它们来过滤结果剩余结果集的条件(假设您使用的是 AND
)。
但是,如果您只包含 C
和 D
,它根本不会使用该索引,因为它不知道要在 A< 中查找什么
.
关于mysql - 索引限制使用表的规则 - MySQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4739659/