根据您的表,列,索引的详细信息,并在WHERE子句中的条件,MySQL优化考虑多种技术来有效地执行涉及SQL查询的查询。可以不读所有的行执行一个巨大的表的查询; 一个join涉及多个表可以在不进行比较的行的每个组合来执行。这一系列操作的优化选择执行最高效的查询被称为“查询执行计划”,也被称为Explain 计划。你的目标是要认识到EXPLAIN PLAN的各个方面指示查询优化的不错,并学习SQL语法和索引技术以改善该计划如果你看到一些低效的操作。
8.8.1. Optimizing Queries with EXPLAIN(使用EXPLAIN优化查询)
EXPLAIN语句可以使用任意的一种方式,以获取有关如何执行MySQL的一份语句中,或信息的代名词形容:
-
当你在一个语句之前使用EXPLAIN关键词,MySQL显示从对查询执行计划的优化信息。也就是说,MySQL解释它将如何处理语句,包括有关如何表的连接和在其中顺序信息。详见,Section 8.8.2, “EXPLAIN
Output Format”。
-
EXPLAIN EXTENDED可以用来获得更多的信息; 详见,Section 8.8.3, “EXPLAIN EXTENDED Output Format”。
在MySQL5.6.3解释提供了有关SELECT,DELETE,INSERT,REPLACE和UPDATE语句的信息。MySQL5.6.3之前,EXPLAIN提供大约只有SELECT语句的信息。
以下部分描述了如何使用EXPLAIN解释扩展到获得查询执行计划的信息。
-
EXPLAIN PARTITIONS研究涉及分区表的查询时才有用。详见,Section 17.3.5, “Obtaining Information About Partitions”。
-
EXPLAIN tbl_name的同义词DESCRIBE tbl_name或SHOW COLUMNS FROM tbl_name。DESCRIBE 和 SHOW COLUMNS 更多信息,详见Section 13.8.1, “DESCRIBE Syntax”, 和 Section 13.7.5.6, “SHOW COLUMNS Syntax” 。
用EXPLAIN的帮助下,你可以看到你应该添加索引表,以便该语句的执行速度更快通过使用索引来查找行。您还可以使用EXPLAIN来检查是否优化join的最佳顺序表。给予提示添加到优化器使用对应于该表被命名在SELECT语句的顺序连接顺序,开始语句SELECT STRAIGHT_JOIN而不只是SELECT。(详见,Section 13.2.9, “SELECT Syntax”。)
EXPLAIN优化跟踪有时提供的信息互补。然而,优化程序跟踪的格式和内容受版本之间改变。更多信息,详见MySQL Internals: Tracing the Optimizer。
当你认为他们应该时如果你有使用索引的问题,运行ANALYZE TABLE更新表的统计数据,如键的基数,会影响优化做出的选择。详见,Section 13.7.2.1, “ANALYZE TABLE Syntax”。
阅读(210) | 评论(0) | 转发(0) |