我自己设置索引很新 . 我目前正在尝试使用它来发现它是如何工作的,以及在什么情况下数据库将使用索引 .
我有一个简单的表,有3列;身份证,姓名和身份 . 我在名称上设置了一个CHAR(30)列的索引 . 根据我的预期,MySQL会在以下查询中忽略此索引:
SELECT * FROM people WHERE name = 'Peter'
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE people ref name name 90 const 1 Using where
但是,使用以下查询时,将使用索引:
SELECT COUNT(*) FROM people WHERE name = 'Peter'
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE people ref name name 90 const 1 Using where; Using index
有人可以向我解释一下吗?
2 回答
“使用索引”意味着它使用索引作为“覆盖索引” . 当它只需要访问索引以满足查询时就会发生这种情况 .
另一方面,如果不存在“使用索引”,但在“键”列中,索引被命名,那么它将以“ref”列中描述的方式使用该索引 .
所以在这两种情况下它都使用索引,但只有COUNT()使用它作为覆盖索引 .
对于每个查询,“
key
" columns indicates "name
" -- so, I'd say your two queries both used the index called "name
", which probably is on the "name
”列 - 这就是您想要的(引用manual):此外,您只需要通过“
1
”行,这是好的(没有全扫描或类似的东西) .“
type
" says " ref”,这似乎是一件好事:和“
ref
" column indicates "const
” - 不确定它究竟意味着什么,但据我所知,这是一件好事 .是什么让您认为您的索引不用于一列?
作为参考,更多信息:7.2.1. Optimizing Queries with EXPLAIN