开辟者大年夜赛路演 | 12月16日,技巧立异,北京不见不散
本文聊聊sql优化器的工作。
关系型数据库的一大年夜优势之一,用户无需关怀数据的拜访方法,因为这些优化器都帮我们处理好了,但sql萌芽优化的时刻,我不得不要对此进行存眷,因为这牵扯到萌芽机能问题。
有经验的法度榜样员都邑对一些sql优化管窥蠡测,比如我们常说的最左匹配原则,非BT谓词规避等等,那么竽暌古化器是若何肯定则些的?以及为何必定要最左匹配,最左匹配的道理是什么,你是否有深刻懂得?
这一篇我们就经由过程一些实例来分析优化器做了哪些工作,以便利我们更好的优化SQL萌芽。
本篇你可以知道:
- sql的拜访路径是什么
- 优化器若何肯定最优拜访路径
- 最左匹配的原则根据是什么
- 若何有效的评估sql射中行数
示例table:
- CREATE TABLE test (
- user_name varchar(100) DEFAULT NULL,
- sex int(11) DEFAULT NULL,
- age int(11) DEFAULT NULL,
- c_date datetime DEFAULT NULL,
- PRIMARY KEY (id),
- # 索引
- KEY id_name_sex (id,user_name,sex),
- KEY name_sex_age (user_name,sex,age)
- ) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8;
一、拜访路径
在SQL语句可以或许被真正履行之前,优化器必鼓起首肯定若何拜访数据。这包含:应当应用哪一个索引,索引的拜访方法若何,是否须要帮助式随机读,等等。
大年夜一条SQL,到优化器优化,再到引擎进行数据萌芽,落地到数据的存储页面,这是一个拜访路径肯定的过程。

谓词就是我们常说的where子句中的一个或多个搜刮参数构成。谓词表达式是索引设计的重要入手点,如不雅一个索引可以或许知足select萌芽语句的所有谓词表达式,那么竽暌古化器就可能建立一个高效的拜访路径。
- select * from test where id =1 and user_name like ’test%’
比如,上述萌芽 中,where后面的搜刮参数,id 和user_name 就是谓词。
三、索引片
索引片即代表谓词表达式所肯定的值域范围,而拜访路径的成本很大年夜程度上取决于索引片的厚度。
同步读是一个随机IO操作,单次的攫取就要消费10ms阁下的时光。这个我们在上篇有解释。
比如:
索引片越厚,须要扫描的索引页就越多,须要处理的索引记录也越多,并且最大年夜的开销照样来自于须要对标进行同步读操作。相反,索引片比较窄,就会明显削减索引拜访的那部分开销,同时会有更少的表同步攫取上。
推荐阅读
开辟者大年夜赛路演 | 12月16日,技巧立异,北京不见不散 据外媒报道,宏碁近日推出一款型号为PE320QK Pro的专业显示器,该款显示器屏幕屏幕比例为惯例的16:9设计,大年夜小为31.5英寸,分>>>详细阅读
本文标题:SQL优化器究竟帮你做了哪些工作?
地址:http://www.17bianji.com/lsqh/39807.html
1/2 1