标签:
1 尽力避免使结果返回额外的行和列,这样传输过程需要浪费时间
2 尽量避免在select中使用*
3 反复多次修改一个查询,获取了更多不需要的数据并不是个好主意,更好的建议是写新查询来代替已有查询来满足业务需要。
首先是Query Cache,采用严格的查询匹配,Query Cache中存放查询语句以及结果集。
然后是解析器,主要是将查询语句分解为多个单词,操作符和内建树。
然后是预处理器,这里主要对权限和语句语义进行检查。
最后是查询优化器,将从解析器,预处理器得到的解析树转换成执行计划。优化器会从多个方案中选择一个合适的执行计划。
最后是查询执行引擎,负责执行执行计划。
了解查询状态:
1 show full processlist 如果登陆的用户具有super权限,那么只能显示本链接的线程状态。每个进程可能有多个状态。
? Sleep ? Query ? Locked ? Analyzing, Statistics ? Copying to tmp table ? Sorting result ? Sending data
http://dev.mysql.com/doc/refman/5.7/en/general-thread-states.html
在进行调优时,尝试执行查询以检查其不同状态,了解执行所处的大致情况。
问题: 无法显示全局,即使使用root登陆。
2 explain select语句 使用explain查看select语句是如何执行。
3 使用show warnings查看经过重构之后的查询语句是怎么样的?貌似无法使用了?
查询电影长度小于50的,如果不建立索引,那么将是全表查询如1
修改表使其增加索引,注意add index后面不需要加上on。如2
再次执行select,查询长度小于50的,发现possible_keys是len,真正使用的也是len。
但是再次执行select,查询长度小于100的,发现possible_keys是len,真正却没有去使用len索引,采用的仍然是全表扫描。
上面查询优化的例子告诉我们建立索引的时候查询优化器不一定使用他们。需要根据实际使用情况进行分析。
1 mysql> explain extended select * from film where length<50; +----+-------------+-------+------+---------------+------+---------+------+------+----------+-------------+ | id | select_type | table | type | possible_keys | key | key_len | ref | rows | filtered | Extra | +----+-------------+-------+------+---------------+------+---------+------+------+----------+-------------+ | 1 | SIMPLE | film | ALL | len | NULL | NULL | NULL | 1142 | 33.01 | Using where | +----+-------------+-------+------+---------------+------+---------+------+------+----------+-------------+ 1 row in set, 1 warning (0.00 sec)
2 mysql> alter table film add index len(length); Query OK, 0 rows affected (0.02 sec) Records: 0 Duplicates: 0 Warnings: 0 3 mysql> explain extended select * from film where length<50; +----+-------------+-------+-------+---------------+------+---------+------+------+----------+-------------+ | id | select_type | table | type | possible_keys | key | key_len | ref | rows | filtered | Extra | +----+-------------+-------+-------+---------------+------+---------+------+------+----------+-------------+ | 1 | SIMPLE | film | range | len | len | 3 | NULL | 27 | 100.00 | Using where | +----+-------------+-------+-------+---------------+------+---------+------+------+----------+-------------+ 1 row in set, 1 warning (0.00 sec) 4 mysql> explain extended select * from film where length<100; +----+-------------+-------+------+---------------+------+---------+------+------+----------+-------------+ | id | select_type | table | type | possible_keys | key | key_len | ref | rows | filtered | Extra | +----+-------------+-------+------+---------------+------+---------+------+------+----------+-------------+ | 1 | SIMPLE | film | ALL | len | NULL | NULL | NULL | 1142 | 33.01 | Using where | +----+-------------+-------+------+---------------+------+---------+------+------+----------+-------------+ 1 row in set, 1 warning (0.00 sec) mysql>
标签:
原文地址:http://www.cnblogs.com/championlai/p/4858897.html