day03如何使用索引
索引在MySQL中也叫键(key)是存储引擎用于快速找到记录的一种数据结构。索引优化应该是对查询性能优化的最有效手段。
1.索引基础。
索引的工作就相当于书的目录,能帮助我们快速定位到想要找到的内容。如果一个数据库表在主键上有索引,则查询会根据id值返回查索引,返回数据行。
索引可以包含一个或者多个列的值。如果索引包含多个列,那么列的顺序也十分重要,因为Mysql只能高效的使用索引的最左前缀列。
1.1.1
索引有很多种类型可以为不同的场景提供更好的性能,在MySQL中索引是在存储引擎层而非服务器层实现,所以没有统一的标准。
B-Tree索引
InnorDB使用的是B+tree,对索引列是顺序组织的存储的,所以很适合查找范围数据,这种效率比较高。
索引对多个值进行排序的依据是CREAT_TABLE语句中定义索引时列的顺序。
哈希索引
哈希索引是基于哈希表实现的,只有精确匹配索引所有列的查询才有效。在MySQL中,只有Memory引擎现实的支持哈希索引。
哈希索引查找非常快,但是并不是按照索引值顺序存储的,所以就无法用于排序。出现哈希冲突时,将以链表的形式进行存储。
例:假如需要存储大量的URL,并需要根据URL进行搜索查找。如果使用B-tree存储,存储内容就会特别大,因为URL本身很长。
则可以新增加带索引的哈希列,缺陷是需要手动维护哈希列的值。解决办法可以用触发器,在新增修改时,同步更新哈希列的值。、
可以自己定义一个哈希算法,如MD5(),截取固定长度值。
2.索引的优点
最常见的B-tree索引,按照属性存储数据,所以MySQL可以用来做orderBy和group by操作。
总结下来索引的优点:
1.索引大大减少服务器需要扫描的数据量。
2.索引可以帮助服务器避免排序和临时表。
3.索引可以将随机I/O变为顺序IO。
浙公网安备 33010602011771号