MySQL手册版本 5.0.20-MySQL优化(二) (1)

7.2.1 EXPLAIN 语法(得到SELECT 的相关信息)

EXPLAIN tbl_name

或者:

EXPLAIN SELECT select_options

EXPLAIN 语句可以被当作 DESCRIBE 的同义词来用,也可以用来获取一个MySQL要执行的 SELECT 语句的相关信息。

EXPLAIN tbl_name 语法和 DESCRIBE tbl_name 或 SHOW COLUMNS FROM tbl_name 一样。

当在一个 SELECT 语句前使用关键字 EXPLAIN 时,MYSQL会解释了即将如何运行该 SELECT 语句,它显示了表如何连接、连接的顺序等信息。

本章节主要讲述了第二种 EXPLAIN 用法。

在 EXPLAIN 的帮助下,您就知道什么时候该给表添加索引,以使用索引来查找记录从而让 SELECT 运行更快。

如果由于不恰当使用索引而引起一些问题的话,可以运行 ANALYZE TABLE 来更新该表的统计信息,例如键的基数,它能帮您在优化方面做出更好的选择。详情请看"14.5.2.1 ANALYZE TABLE Syntax"。

您还可以查看优化程序是否以最佳的顺序来连接数据表。为了让优化程序按照 SELECT 语句中的表名的顺序做连接,可以在查询的开始使用 SELECT STRAIGHT_JOIN 而不只是 SELECT。

EXPLAIN 返回了一行记录,它包括了 SELECT 语句中用到的各个表的信息。这些表在结果中按照MySQL即将执行的查询中读取的顺序列出来。MySQL用一次扫描多次连接(single-sweep, multi-join) 的方法来解决连接。这意味着MySQL从第一个表中读取一条记录,然后在第二个表中查找到对应的记录,然后在第三个表中查找,依次类推。当所有的表都扫描完了,它输出选择的字段并且回溯所有的表,直到找不到为止,因为有的表中可能有多条匹配的记录下一条记录将从该表读取,再从下一个表开始继续处理。

时间: 2024-08-01 10:35:55

MySQL手册版本 5.0.20-MySQL优化(二) (1)的相关文章

MySQL手册版本 5.0.20-MySQL同步(一)

mysql 6 MySQL 同步 同步功能在MySQL 3.23.15就开始引进了,它可以把一个MySQL服务器上的数据复制到另一个服务器上去.本章描述了MySQL的各种复制特性.介绍了同步的概念,如何设置同步服务器,以及可用服务器的参照.还提供了一系列的常见问题及其答案,疑难解答. "14.6 Replication Statements"中介绍了同步相关的SQL语句语法. 我们建议经常访问"http://www.mysql.com"经常阅读本章的最新内容.同步功

MySQL手册版本 5.0.20-MySQL优化(二)

mysql|优化 7.2.1 EXPLAIN 语法(得到SELECT 的相关信息) EXPLAIN tbl_name 或者: EXPLAIN SELECT select_options EXPLAIN 语句可以被当作 DESCRIBE 的同义词来用,也可以用来获取一个MySQL要执行的 SELECT 语句的相关信息. EXPLAIN tbl_name 语法和 DESCRIBE tbl_name 或 SHOW COLUMNS FROM tbl_name 一样. 当在一个 SELECT 语句前使用关

MySQL手册版本 5.0.20-MySQL优化(一)

mysql|优化 7 MySQL 优化 数据库优化是一项很复杂的工作,因为这最终需要对系统优化的很好理解才行.尽管对系统或应用系统的了解不多的情况下优化效果还不错,但是如果想优化的效果更好,那么就需要对它了解更多才行. 本章主要讲解了几种优化MySQL的方法,并且给出了例子.记着,总有各种办法能让系统运行的更快,当然了,这需要更多的努力. 7.1 优化概述 让系统运行得快得最重要因素是数据库基本的设计.并且还必须清楚您的系统要用来做什么,以及存在的瓶颈. 最常见的系统瓶颈有以下几种: 磁盘搜索.

MySQL手册版本 5.0.20-MySQL优化(三)

mysql|优化 7.2.2 估算查询性能 在大多数情况下,可以通过统计磁盘搜索次数来估算查询的性能.对小表来说,通常情况下只需要搜索一次磁盘就能找到对应的记录(因为索引可能已经缓存起来了).对大表来说,大致可以这么估算,它使用B树做索引,想要找到一条记录大概需要搜索的次数为:log(row_count) / log(index_block_length / 3 * 2 / (index_length + data_pointer_length)) + 1. 在MySQL中,一个索引块通常是10

MySQL手册版本 5.0.20-MySQL优化(四) (1)(4)

可以在锁表后,一起执行几个语句来加速 INSERT 操作: LOCK TABLES a WRITE; INSERT INTO a VALUES (1,23),(2,34),(4,33); INSERT INTO a VALUES (8,26),(6,29); UNLOCK TABLES; 这对性能提高的好处在于:直到所有的 INSERT 语句都完成之后,索引缓存一次性刷新到磁盘中.通常情况是,多有少次 INSERT 语句就会有多数次索引缓存刷新到磁盘中的开销.如果能在一个语句中一次性插入多个值的

MySQL手册版本 5.0.20-MySQL优化(四) (1)(2)

想要提高 ORDER BY 的速度,首先要看MySQL能否使用索引而非额外的排序过程.如果不能使用索引,可以试着遵循以下策略: 增加 sort_buffer_size 的值. 增加 read_rnd_buffer_size 的值. 修改 tmpdir,让它指向一个有很多剩余空间的专用文件系统.如果使用MySQL 4.1或更新,这个选项允许有多个路径用循环的格式.各个路径之间在 Unix 上用冒号(':')分隔开来,在 Windows,NetWare以及OS/2 上用分号(';').可以利用这个特

MySQL手册版本 5.0.20-MySQL优化(四) (1)

7.2.9 MySQL 如何优化 ORDER BY 在一些情况下,MySQL可以直接使用索引来满足一个 ORDER BY 或 GROUP BY 子句而无需做额外的排序. 尽管 ORDER BY 不是和索引的顺序准确匹配,索引还是可以被用到,只要不用的索引部分和所有的额外的 ORDER BY 字段在 WHERE 子句中都被包括了.下列的几个查询都会使用索引来解决 ORDER BY 或 GROUP BY 部分: SELECT * FROM t1 ORDER BY key_part1,key_part

MySQL手册版本 5.0.20-MySQL优化(四) (1)(5)

通常地,应该保存所有的冗余数据(在数据库原理中叫做"第三范式").然而,为了能取得更高的效率复制一些信息或者创建摘要表也是划算的. 存储过程或者 UDFs(用户定义函数) 的方式在执行一些任务时可能性能更高.尽管如此,当数据库不支持这些特性时,还是有其他的替代方法可以达到目的,即使它们有点慢. 可以从查询缓存或应答中取得结果,然后将很多次的插入及更新操作放在一起做.如果数据库支持表锁(如MySQL和ORACLE),那么这就可以确保索引缓存在所有的更新操作之后只需要刷新一次. 当不需要直

MySQL手册版本 5.0.20-MySQL优化(四) (1)(3)

7.2.12 加速 INSERT 插入一条记录花费的时间由以下几个因素决定,后面的数字大致表示影响的比例: 连接:(3) 发送查询给服务器:(2) 解析查询:(2) 插入记录:(1 x 记录大小) 插入索引:(1 x 索引数量) 关闭:(1) 这里并没有考虑初始化时打开数据表的开销,因为每次运行查询只会做这么一次. 如果是 B-tree 索引的话,随着索引数量的增加,插入记录的速度以 log N 的比例下降. 可以使用以下几种方法来提高插入速度: 如果要在同一个客户端在同一时间内插入很多记录,可