ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
索引可以让服务器快速定位到表的指定位置.但是这并不是索引的唯一作用,到目前为止可以看到,根据创建索引的数据结构不同,索引也有一些其他的附加作用 最常见的B-Tree索引,按照顺序存储数据,所以mysql可以用来做order by和group by操作,因为数据是有序的,所以B-Tree也就将相关的列值都存储在一起.最后因为索引中存储了实际的列值,所以某些查询只使用索引就能够完成全部查询.据此特性,总结下来索引有如下三个优点 1. 索引大大减少了服务器需要扫描的数据量 2. 索引可以帮助服务器避免排序和临时表 3. 索引可以将随机I/O变为顺序I/O "索引"这个主题建议阅读 ![](https://box.kancloud.cn/c089bd8306f95a00c4403654d8aedda3_667x44.png) 这书详细介绍了如何计算索引的成本和作用,如何评估查询速度,如何分析索引维护的代价和其带来的好处等 书中介绍了如何评价一个索引是否适合某个查询的"三星系统", **索引将相关的记录放到一起则获得一星. 如果索引中的数据顺序和查找中的顺序一致则获得二星. 如果索引中的列包含了查询中的需要的全部列则获得"三星"** ---- 索引是最好的解决方案吗? 索引并不总是最好的工具.总的来说,只有当索引帮助存储引擎快速查找到记录带来的好处大于其带来的额外工作时,索引才是有效的,对于非常小的表,大部分情况下简单的全表扫描更高效. 对于中大型的表,索引就非常有效, 但对于特大型的表,建立和使用索引的代价将随之增长.这种情况下,则需要一种技术可以直接区分查询需要的一组数据,而不是一条记录一条记录的匹配,例如可以使用分区技术 如果表的数量特别多,可以建立一个元数据信息表,用来查询需要用到的某些特性,例如执行哪些需要聚合多个应用分布在多个表的数据的查询,则需要记录"那个用户的信息存储在那个表中"的元数据,这样在查询时就可以直接忽略那些不包含指定用户信息的表 对于大型系统,这是一个常用的技巧,事实上,Infobright就是使用类似的实现.对于TB级的数据,定位单条记录的意义不大,所以经常会使用块级别元数据技术来替代索引