了解索引
1、什么是索引?
在mysql中,索引是一种特殊的数据库结构,由数据表中的一列或多列组合而成,可以用来快速查询数据表中有某一特定值的记录。通过索引,查询数据时不用读完记录的所有信息,而只是查询索引列即可。
2、索引解读
在MySQL的中,索引在大数据量查询的情况下必须用到索引,因为索引是类似于目录。如果不使用索引,数据会零散的保存在磁盘块中,查询数据需要挨个遍历每一个磁盘块,直到找到数据为止,使用索引后会将磁盘块以树桩结构保存,查询数据时会大大降低磁盘块的访问数量。想象一下,每条数据的查询都是一个io扫描的话,假设一张表有一百万条数据,你要找的数据刚好就是最后一条,那么就要进行一百万次io,这样就使数据库的性能大幅度降低了。索引就是解决这样的问题的。
3、为什么索引能解决这样的问题呢?
MySQL 中存储索引用的一般都是 B + 树。它的数据都存放在叶子节点中,同时叶子节点之间还添加了指针形成了链表。有点像 HashMap 的底层实现,数组 + 链表的结构。最重要的是,B+树最高只有三层,也就是说,无论数据在哪,最多只需要三次IO扫描便可以拿到数据。大大的节省了IO磁盘扫描次数。所以索引有利于增加数据获取的速度。
提高查询速度原因
1.快速定位数据
在MySQL的中,索引在大数据量查询的情况下必须用到索引,因为索引是类似于目录当执行查询时,数据库引擎可以使用索引来快速定位包含所需数据的位置。相比于全表扫描,它不需要遍历整个数据集,而是通过索引直接跳到可能包含所需数据的位置。
2.减少磁盘I/O操作
当没有索引时,数据库引擎可能需要执行全表扫描来找到符合查询条件的数据。全表扫描会逐行读取整个表,这可能导致大量的磁盘I/O操作,降低查询的速度。而有了索引,数据库引擎可以根据索引的位置信息快速定位到符合查询条件的数据所在的磁盘块,从而减少磁盘I/O操作的次数,提高查询速度。
3.数据的有序性
索引通常对存储的数据进行排序,这可以帮助优化查询。当数据按照特定的列进行排序时,索引会将这些有序的值存储在一起。这使得范围查询(如大于、小于、介于等)更加高效,因为数据库引擎可以直接定位到符合查询范围的数据块。
4.减少数据比较次数
索引存储了数据的一部分或全部副本,这些副本按照特定的排序规则进行排列。当执行查询时,数据库引擎可以使用索引进行数据的比较操作,而不需要每次都直接访问原始数据。这可以大大减少需要比较的数据量,从而提高查询速度。
需要注意的是,索引并非没有代价的。索引需要额外的存储空间,并且在插入、更新和删除数据时会引入一定的开销,因为需要维护索引的结构。因此,过多或不必要的索引可能会导致性能下降。在设计索引时,需要权衡查询速度和维护成本,选择适当的列和数据结构来创建索引。
总结起来,索引可以通过快速定位数据、减少磁盘I/O操作、提供数据的有序性以及减少数据比较次数等方式,显著提高查询的速度和效率。