摘自官网
MySQL使用索引进行以下操作:
-
WHERE条件中,快速查找匹配的行。(快速查询数据)
-
从准备查询的数据中消除多余行。如果可以在多个索引之间进行选择,则MySQL通常会使用查找最少行数的索引。
-
如果表具有多列索引,那么优化器可以使用索引的任何最左前缀来查找行。
举例来说,如果你有一个三列的索引 (col1, col2, col3),你有索引的搜索功能(col1), (col1, col2)以及(col1, col2, col3)。有关更多信息,请参见 第8.3.6节“多列索引”。 -
执行联接时从其他表中检索行。如果声明相同的类型和大小,MySQL可以更有效地在列上使用索引。
在这种情况下, **VARCHAR与 CHAR被认为是相同的,**如果它们被声明为相同的大小。例如, VARCHAR(10)和 CHAR(10)是相同的大小,但是 VARCHAR(10)和 CHAR(15)不是。为了在非二进制字符串列之间进行比较,两个列应使用相同的字符集。例如,将一utf8列与一 latin1列进行比较会排除使用索引。
如果无法通过转换直接比较值,则比较不同的列(例如,将字符串列与时间或数字列进行比较)可能会阻止使用索引。
对于给定的值,如1 是数值,它可能与字符串列进行比较时,是相等的,例如 ‘1’,’ 1’, ‘00001’,或’01.e1’。这排除了对字符串列使用任何索引的可能性。