Mysql手册-优化

MysqL语句优化笔记

笔记主要记录语句优化。

优化SELECT语句

WHERE语句优化

1.删除不必要的括号

牺牲可读性来提高算术运算,因为mysql优化器会执行类似的优化

2.折叠常量

 5 AND b = c AND a = 5

3.移除恒定条件

= 5 AND B = 5) OR (b = 6 AND 5 = 5) OR (b = 7 AND 5 = 6)
-- 优化后
b = 5 OR b = 6

4.索引使用的常量表达式仅被计算一次

我的理解是使用NOW()每一行都得计算对比一次。另外使用NOW()还不会被缓存。

5.避免使用COUNT(*)NOT NULL

6.检测无效常量表达式,不然返回空行。

7.没有合计方法或者GROUP BY的时候不使用HAVING

8.JOIN表的时候尽量用WHERE过滤一些数据。

9.会最先被读。

我对这里的理解是查询的时候如果有常量表存在会先把对应字段替换掉

MysqL">-- 替换前
SELECT Table1.unique_not_null_column,Table2.any_column
    FROM Table1,Table2
    WHERE Table1.unique_not_null_column = Table2.any_column
    AND Table1.unique_not_null_column = 5;

-- 替换后
SELECT 5,Table2
WHERE 5 = Table2.any_column
AND 5 = 5;

10.使用最佳的JOIN组合。

如果ORDER BY和GROUP BY子句中的所有列 都来自同一个表,则在加入时首先首选该表

11.ORDER BYGROUP BY连用时最好是同一张表。

如果存在ORDER BY子句和不同的GROUP BY子句,或者如果ORDER BY或者GROUP BY包含连接队列中第一个表以外的表中的列,则会创建临时表。

12.如果使用sql_SMALL_RESULT修饰符,MysqL使用内存临时表。

还不明白,待查询

13.使用最佳索引查表,除非优化器认为全表扫描更快。

 10

即使id为主键 还是会全表扫描。因为b > 10需要全表扫描,使用索引查询为多此一举。

14.在某些情况下,MysqL甚至无需咨询数据文件即可从索引中读取行。如果索引中使用的所有列都是数字,则仅使用索引树来解析查询

MysqL resolves the following queries using only the index tree,assuming that the indexed columns are numeric:

MysqL">SELECT key_part1,key_part2 FROM tbl_name WHERE key_part1=val;

SELECT COUNT(*) FROM tbl_name WHERE key_part1=val1 AND key_part2=val2;

SELECT key_part2 FROM tbl_name GROUP BY key_part1;

对于联合索引a,b,c来说,在Innodb存储引擎下,使用b,c也能使用索引(索引覆盖)。Myisam引擎是用不到索引的。

15.在每个记录被输出前,那些不匹配HAVING子句的行被跳过。

???没明白这句话的含义

16.因为索引是按顺序排列的,所以按照索引使用ORDER BY的话无需重新排序

SELECT ... FROM tbl_name
ORDER BY key_part1 DESC,key_part2 DESC,... ;

TO BE CONTINUE...

相关文章

显卡天梯图2024最新版,显卡是电脑进行图形处理的重要设备,...
初始化电脑时出现问题怎么办,可以使用win系统的安装介质,连...
todesk远程开机怎么设置,两台电脑要在同一局域网内,然后需...
油猴谷歌插件怎么安装,可以通过谷歌应用商店进行安装,需要...
虚拟内存这个名词想必很多人都听说过,我们在使用电脑的时候...