Article Outline
mysql索引
mysql索引
MySQL使用的是B-Tree索引。B-Tree索引之所以能够加快访问数据的速度,因为存储引擎不再需要全表扫描来获取需要的数据,而是从索引的根节点开始搜索。B-Tree对几种特定的查询才会生效。
全值匹配:指的是和索引中对的所有列进行匹配,如建立了姓名和生日的索引,如果查询姓名为xx,出生日期为xxx的人,则为全值匹配
匹配最左前缀:还是刚刚的例子,如果查询名字为xx的人,因为索引中有两个字段,而实际查询的条件中只有一个字段,称之为最左匹配。
匹配列前缀:如名字以j开头的用户
匹配范围值:查询名字以a-b开头的用户。
只访问索引的查询:即查询只需要访问索引,而无需访问数据行。
几种常见的索引:
- 哈希索引:基于哈希表实现,只有精准的匹配索引的所有列,索引才有用。
InnoDB引擎中有一个特殊的功能叫做“自适应哈希索引”,当InnoDB检测到某些索引的使用非常频繁时,会在内存中创建一个哈希索引,这是一个完全自动的,内部的行为,用户无法控制或者配置。
索引的优点
索引减少了服务器需要扫描的数据量
索引可以帮助服务器避免排序
所以可以将随机IO变为顺序IO
建索引的小技巧
独立的类:作为索引的列,不要参与计算,如果 select * from table where id +1 =5 ;这样的并不能使用到索引。
前缀索引:例如一个长度较长的字符串,对于这种字符串,如果创建索引,这会让索引变得大而且慢。这种情况下,可以索引开始的部分字符,可以很大程度地节省索引的空间。
前缀索引的语法是:ALTER TABLE 库名.表名 ADD key(字段名(7)) 7是这个字段的前缀索引的长度,例如这个字段长度是100,那么7则是取前7的长度作为索引。