随笔分类 - mysql
摘要:如果要指定查询的数据行数,在查询语句中使用limit子句,而不是获取所有数据行结果集,然后去掉没用的数据。 MYSQL有时会对没有having子句,带有limit关键字的查询进行优化: 1:如果用limit子句选择很少的行数据集,mysql会利用索引来代替全表扫描; 2:如果组合使...
阅读全文
摘要:在很多情况下,Distinct和order by的组合需要建立一个内存临时表。因为distinct关键字可能利用group by,所以了解下mysql如何处理group by有帮助。 distinct通过会被当成一个特殊的group by,e.g.:SELECT DISTINCT c1, c2, ...
阅读全文
摘要:GROUP BY Optimization 常规的匹配group by(分组)操作子句是扫整表并且创建包含连续的分组行的临时表, 利用临时表得到group数据,运用appregate functions(聚合函数)(有的话)。有些情况下,MYSQL 可能更好的通过使用Index access来避免...
阅读全文
摘要:ORDER BY Optimization 某些情况下,MYSQL可以使用index排序而避免额外的sorting. 即使order by语句列不能准确的匹配index,只要没有index中(不在order by的列)在where语句以常量形式出现。(最左前缀)SELECT * FROM t1...
阅读全文
摘要:Block Nested-Loop and Batched Key Access Joins Batched Key Access (BKA) Join算法通过index和join buffer访问joined表,BKA算法支持inner join,outer join 和semi join操作,...
阅读全文
摘要:查询from语句中的Outer Join可以在多种情况下被简化; 在解析阶段,右外连接操作可以被转变为等下ode值包含left join的操作,在一般情况下,转变:(T1, ...) RIGHT JOIN (T2,...) ON P(T1,...,T2,...) =(T2, ...) LEFT J...
阅读全文
摘要:table_factor的语法和标准sql比较,后者只接受table_reference,每个逗号项都等于一个inner Join,e.g.SELECT * FROM t1 LEFT JOIN (t2, t3, t4) ON (t2.a=t1.a AND t3.b=...
阅读全文
摘要:MySQL在多表之间执行join时,利用一种nested-loop algorithm 或者其变种;(嵌套循环)Nested-Loop Join Algorithm 一个简单的嵌套循环连接(NLJ)算法 从第一个表读取一行,然后传递给Join中的其他表依次读取,过程一直重复剩余的表都被Join。 ...
阅读全文
摘要:On条件(在“A left join b on conditional_expr”)决定如何从table B 中检索数据行(Matching-State); 如果B中没有行匹配On 条件,额外的B的所有数据列被设为null; 如果Matching-Stage阶段,where语句的任何限制条件...
阅读全文
摘要:Innodb通过自动把主键列添加到每个二级索引来扩展它们:CREATE TABLE t1 ( i1 INT NOT NULL DEFAULT 0, i2 INT NOT NULL DEFAULT 0, d DATE DEFAULT NULL, PRIMARY KEY (i1, i2), ...
阅读全文
摘要:Index Merge用在通过一些range scans得到检索数据行和合并成一个整体。合并可以通过 unions,intersections,或者unions-intersection运用在底层的扫描上。合并Index scans结果只能在一个表中,不能合并多张表的scans结果; 在ex...
阅读全文
摘要:Range查询:用单独的Index的一个或多个index值来检索表的子集行数据,当然包含多个index。 1:一个index (单一部分)的range access 方法:(eg : 指的这种key (column1 )) 单独的index,index值间隔可以方便的由对应的where子句的条件表...
阅读全文
摘要:该部分讨论where子句的优化,不仅select之中,相同的优化同样试用与delete 和update语句中的where子句; 1: 移去不必要的括号: ((a AND b) AND c OR (((a AND b) AND (c AND d))))-> (a AND b AND c) OR ...
阅读全文
摘要:Index Condition Pushdown(ICP)索引条件下推优化适用于mysql在table中通过index检索数据行,没有ICP,存储引擎层遍历索引来定位基表(base table)上的数据行并且把它们返回给server层,由server层来计算过滤where语句.使用ICP,并且...
阅读全文
摘要:EXPLAIN Extra 列信息: explain Extra列输出包含了关于mysql如何解决query的额外信息,特别是出现Using filesort 和 using temporary时,应当格外注意: 1:Child of 'table' pushed join@1 在做join...
阅读全文
摘要:浅谈mysql innodb缓存策略:The InnoDB Buffer Pool Innodb 持有一个存储区域叫做buffer pool是为了在内存中缓存数据和索引,知道innodb bufferpool怎么工作,和利用它读取频繁访问的数据,是mysql优化重要的方面。 理想状况下,把buffe...
阅读全文
摘要:有时用别的方式而不是子查询可以获得更高的性能 : For example:SELECT * FROM t1 WHERE id IN (SELECT id FROM t2); 改写:SELECT DISTINCT t1.* FROM t1, t2 WHERE t1.id=t2.id; 查询:SELE...
阅读全文
摘要:用子查询语句来影响子查询中产生结果rows的数量和顺序. For example:SELECT * FROM t1 WHERE t1.column1 IN (SELECT column1 FROM t2 ORDER BY column1);SELECT * FROM t1 WHERE t1.col...
阅读全文
摘要:Mysql 在5.6.3中,优化器更有效率地处理派生表(在from语句中的子查询): 优化器推迟物化子查询在from语句中的子查询,知道子查询的内容在查询正真执行需要时,才开始物化。这一举措提高了性能: 1:之前版本(5.6.3),from语句中的子查询在explain select ...
阅读全文
摘要:Mysql执行计划翻译: 官网原文请见http://dev.mysql.com/doc/refman/5.6/en/explain-output.html:5.6 EXPLAIN语句提供有关SELECT语句的执行计划信息。 EXPLAIN返回在SELECT语句中使用的每个表的一行有关信息。...
阅读全文

浙公网安备 33010602011771号