浅谈对 索引的认知

版权声明:本文为博主原创文章,未经博主允许不得转载——Cc。 https://blog.csdn.net/mufeng633/article/details/88869306

1.索引三大特性
三大特性分别是:
a、索引高度较低, io次数会很少,数据访问速度增加,索引高度较低是优化利器,几百万数据访问一条数据也是很快完成,尽管有8个或者几个逻辑读,也可很快完成查询。
b、索引存储列值,索引可以看作是列和rowid的组合。
这样的特性可以优化count,sum、avg类sql,第二个特性和第三个特性共同可以优化max、min类sql。
c、索引本身有序
索引有序可以优化order by 语句 有效减少内存的使用,走索引消除排序,如果不回表的话代价更低。
索引的有序特性加上存值特性,可以优化max,min类sql
优化distinct,有无索引在执行distinct的时候使用的是不同的算法,有索引时使用的算法更佳。

在使用索引的时候尽量避免回表的情况发生。

  1. 说说用组合索引需要考虑什么问题。
    首先需要评估是否适合使用组合索引,当分别使用一个条件筛选出的结果集很多,但是两个条件一起使用筛选出的结果集很小的时候,这两列就适合建立组合索引
    使用要考虑能否消除回表,尽量避免出现回表的情况,
    组合索引的组合顺序是要考虑单列的查询情况,如果a、b列组合索引,b列查询多则应该是b、a的顺序建立组合索引。
    组合索引较佳顺序一般是将列等值查询的列置前
    注意组合索引与组合条件中关于in的优化。
    仅仅等值查询无范围查询时,组合索引不影响性能

  2. 分区表中的聚合语句有什么特别之处?
    根据老师的例子简单总结出来就是:避免回表。
    在使用聚合函数时,针对使用聚合函数的这一列,在使用where条件以及frrom的时候,不要让这列以外的列出现,这样避免回表,即在去全区扫描,针对where条件
    去筛选结果出来,在使用分区表的时候,尽量将sql的后半部分写为from某个分区,例如:from p1。这样不会造成再在这个区整个扫描的情况。
    另外就是如果使用where条件去界定分区的时候,一定注意大于等于、小于等于和大于、小于的区别,否则就会多出来一个分区的全区扫描。

索引列也是表,如果索引中包括你需要的列,查询结果就找到了,如果没有你需要的列,索引列中有指针指向表记录的行位置,从表中查询列值。

猜你喜欢

转载自blog.csdn.net/mufeng633/article/details/88869306