高性能sql调优-索引

一、序言

      解决sql性能问题,可以通过索引应用、表分区应用、统计数据收集、语句改写和提示(Hint)应用等方法来解决sql语句存在的性能问题。这篇文章主要讲解索引的调优。索引对于关系数据库sql调优来说,其重要性怎么强调都不过分,因为对sql调优来讲最终的目的就是通过减少sql语句对系统资源的消耗来达到目的,而索引又是缩减sql语句资源消耗的最主要的手段,当然也可以通过为sql语句分配更多的资源来达到目的,但是这不是sql调优的主要手段,拼资源也不是传统关系库的优势。

二、详情

     1、索引引用的一般规则

        1)索引越少越好

              建索引时,需要从整个系统角度综合考虑,能少建就少建,能不建就不建。索引就是一把双刃剑,即时应用正确,也是在提升检索性能的同时,以牺牲数据写性能和增加系统负载为代价的。更何况,有索引的表比没有索引的表在数据加载效率方面会很差。

        2)索引列越少越好

              除了上面说的在表上随便创建索引外,另一个经常遇到的场景就是,研发人员或者其他人员由于不太懂sql调优技术,干脆把where条件中的所有夫人列上都建上索引,不但增加索引数量,还会出现很多的复合索引,他们认为这下可以万无一失了,执行计划必须走索引,其实不然,即时执行计划走索引,有时也不是最优的,甚至可能性能很差。很多时候,哪怕一个合理的单列索引,也比多个庞大的复合素银强太多,今儿为相关sql语句带来大幅度的性能提升。

       3)尽量少用函数索引

               平时的优化工作中,在客户库中,常常会看到函数索引的身影,有的还比较多,函数索引的应用,很多时候也是无奈之举,因为系统一旦上线,应用代码就不那么容易更改,即使更改,也是需要一定的时间和周期,期间,只能适用函数索引来解决发现的性能问题。

        4)选择正确的索引类型

        5)为复合索引选择正确的列顺序

            当必须创建复合索引时,尽量将适用比较频繁且性能好的列排在前面。

        6)为分区表选择正确的索引类型

  2、索引应用的误区

        1)只有走索引才是最优的

        2)索引有益无害

        3)索引肯定比表小

        4)索引输出的数据都是有序的

        5)索引的高度会极大的影响性能 

猜你喜欢

转载自blog.csdn.net/JavaWeb_Hao/article/details/82725685