MySQL索引
一、为什么要使用索引
优化查询,减少扫描的表行数。打个比方,索引的作用就和查新华字典,字典的索引的作用的一样的。
二、索引的类型
1、索引是在存储引擎中实现的,而不是在服务器层中实现的。所以,每种存储引擎的索引都不一定完全相同,并不是所有的存储引擎都支持所有的索引类型。
2、如果使用的是组合索引(即有多个列),需要满足 ”最左前缀“ 的 规则,这和索引的存储方式 B-tree有关。
参照:最左前缀原则
三、索引的长度
desc或者explain命令可以查看索引的key_len:
+----+-------------+-------+------+---------------+----------+---------+----------------------------+-------+-------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+------+---------------+----------+---------+----------------------------+-------+-------+
| 1 | SIMPLE | cry | ALL | NULL | NULL | NULL | NULL | 64733 | NULL |
| 1 | SIMPLE | zd | ref | cry_brzd | cry_brzd | 153 | hospitalinfection.cry.ZYID | 1 | NULL |
+----+-------------+-------+------+---------------+----------+---------+----------------------------+-------+-------+
key_len为:153
SELECT * FROM mytable WHERE username like'admin%' ——未使用索引
SELECT * FROM mytable WHEREt Name like'%admin'———使用了索引
2、对查询列使用了mysql函数,或者使用了 not in 、<>等操作符。
3、全文检索的索引可以建立在text或者varchar字段上面,配合match...against使用,如果想要匹配中文的话,需要使用分词器,或者通过pingyin4j这类库将汉字转化为拼音,再匹配 etc.
4、......