索引好处有哪些?索引总是最佳的解决方案吗?
2021-01-02 本文已影响0人
岛上码农
索引使得服务器能够快速定位到数据表中的位置,但这不是索引的全部好处。基于索引创建的数据结构的不同,索引还有一些其他的好处。
二叉树索引是最常用的一种方式,通过将数据有序排列,MySQL可以把这个特点利用在ORDER BY和GROUP BY上。由于数据已经提前排好序了,二叉树同样会将相关的值邻近存储。最终,索引实际上存储了一个数据值的副本,因此有些查询可以仅仅通过索引就查询出来。索引主要有如下好处:
- 减少查询的数据量;
- 避免通过临时表进行排序;
- 将随机I/O访问转变为顺序I/O。
那么索引是不是最佳的解决方案呢?
事实上,索引并不是总是合适的。总体来说,在帮助存储引擎简化数据行查找的应用上绝大部分时候有效。但对于很小的表来说,直接将数据行全部读入更有效;对于中大型数据表,索引效果时分明显;对于超大型的数据表,对于需要使用索引的场合,索引带来的开销会逐步加重。对于这种情况,需要使用数据行查询的热度分组技术,例如分表技术。
如果数据表很多,可以根据查询热点数据的特性,创建一个中间表辅助查询。例如,在一个数据分表的多租户应用中,你需要进行数据聚合查询。你可以将对应的租户信息和对应的表信息存储在一张表里,这可以让你忽略那些没有对应用户信息的数据表。这种方式通常在大的数据级别有用。对于TB级别,在每个数据行做标记没有意义,索引被块数据(pre-block metadata)替换了。