作家
登录

SQL优化器究竟帮你做了哪些工作?

作者: 来源: 2017-12-15 13:09:35 阅读 我要评论

开辟者大年夜赛路演 | 12月16日,技巧立异,北京不见不散

本文聊聊sql优化器的工作。

关系型数据库的一大年夜优势之一,用户无需关怀数据的拜访方法,因为这些优化器都帮我们处理好了,但sql萌芽优化的时刻,我不得不要对此进行存眷,因为这牵扯到萌芽机能问题。

有经验的法度榜样员都邑对一些sql优化管窥蠡测,比如我们常说的最左匹配原则,非BT谓词规避等等,那么竽暌古化器是若何肯定则些的?以及为何必定要最左匹配,最左匹配的道理是什么,你是否有深刻懂得?

这一篇我们就经由过程一些实例来分析优化器做了哪些工作,以便利我们更好的优化SQL萌芽。


  • id int(11) NOT NULL AUTO_INCREMENT,  

    本篇你可以知道:

    1. sql的拜访路径是什么
    2. 优化器若何肯定最优拜访路径
    3. 最左匹配的原则根据是什么
    4. 若何有效的评估sql射中行数

    示例table:

    1. CREATE TABLE test (  
    2. user_name varchar(100) DEFAULT NULL,  
    3. sex int(11) DEFAULT NULL,  
    4. age int(11) DEFAULT NULL,  
    5. c_date datetime DEFAULT NULL,
    6. PRIMARY KEY (id),  
    7. # 索引
    8. KEY id_name_sex (id,user_name,sex),  
    9. KEY name_sex_age (user_name,sex,age)  
    10. ) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8; 

    一、拜访路径

    在SQL语句可以或许被真正履行之前,优化器必鼓起首肯定若何拜访数据。这包含:应当应用哪一个索引,索引的拜访方法若何,是否须要帮助式随机读,等等。

    大年夜一条SQL,到优化器优化,再到引擎进行数据萌芽,落地到数据的存储页面,这是一个拜访路径肯定的过程。

    谓词就是我们常说的where子句中的一个或多个搜刮参数构成。谓词表达式是索引设计的重要入手点,如不雅一个索引可以或许知足select萌芽语句的所有谓词表达式,那么竽暌古化器就可能建立一个高效的拜访路径。

    1. select * from test where id =1 and user_name like ’test%’ 

    比如,上述萌芽 中,where后面的搜刮参数,id 和user_name 就是谓词。

    三、索引片

    索引片即代表谓词表达式所肯定的值域范围,而拜访路径的成本很大年夜程度上取决于索引片的厚度。

    同步读是一个随机IO操作,单次的攫取就要消费10ms阁下的时光。这个我们在上篇有解释。

    比如:


  • // 匹配到2个数据  

    索引片越厚,须要扫描的索引页就越多,须要处理的索引记录也越多,并且最大年夜的开销照样来自于须要对标进行同步读操作。相反,索引片比较窄,就会明显削减索引拜访的那部分开销,同时会有更少的表同步攫取上。


  • sql2:select * from test where sex=1 and age <10;  
  • SQL优化器毕竟帮你做了哪些工作?

     1/4    1 2 3 4 下一页 尾页

      推荐阅读

      宏碁4K专业显示器开卖:sRGB色域可达130%

    开辟者大年夜赛路演 | 12月16日,技巧立异,北京不见不散 据外媒报道,宏碁近日推出一款型号为PE320QK Pro的专业显示器,该款显示器屏幕屏幕比例为惯例的16:9设计,大年夜小为31.5英寸,分>>>详细阅读


    本文标题:SQL优化器究竟帮你做了哪些工作?

    地址:http://www.17bianji.com/lsqh/39807.html

    关键词: 探索发现

    乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

    网友点评
    自媒体专栏

    评论

    热度

    精彩导读
    栏目ID=71的表不存在(操作类型=0)