Mysql数据库sql优化
一. 正则表达式
二. 查询
1. show status 查看数据的一下日志
这次登录以来操作多少次
Show status like ‘com_insert%’
Show status like ‘com_update%’
Show status like ‘com_select%’
Show status like ‘com_delete%’
2. show status like 'innodb_rows%'
数据库历史操作以来增删改查的影响行数
3. show status like 'connections%'
Mysql历史 链接次数,不管成功还是失败,都会记录
三. Mysql查询语句优化
1. 有关系运算符,等于符号放在最前
2. 创建索引,尽量使用区分度高的列(自增长列,不重复)
3. 使用like,
Like “%l”,使用索引
Like “%l%”,不使用索引
4. 尽量将or转换为union all
Or 不使用索引
Union all 会使用索引
Select * from user where name=’a’ union all select * from user where age=’20’
5. 字段查询使用函数不会使用索引.
不加索引:Where truncate(price)=1
加索引:where price>1 and price<2
6. 如果数字作为字符查询,不加索引,数字加上引号转为字符串,加索引
Where tel=12345678901 不加索引
Where tel=’12345678901’加索引
7. 字段数据加上运算符,加索引
Select * from table where age+300>500 不加索引
Select * from table where age>500 加索引
8. 使用组合索引时,必须要包括第一列
如:
Alter table test add index(a,b,c)
不适用索引
Where b=1 and c=1
Where b=1
Where c=1
使用索引
Where a=1 b=1 c=1
Where a=1 b=1
Where a=1 c=1
Where a=1
9. 尽量避免使用is null 或者 is not null,使用时不加索引
10. 不等于(!=)不会使用索引
11. Order by 列,必须包含所有的相同的索引,才会使用索引
Order by 中,不能同时包含desc,asc
如:
Alter table test add index(a,b)
Alter table test add index(c)
不使用索引:
Select * from test where a=1 and c=1
Select * from test where b=1
Select * from test order by a asc,d desc
使用索引:
Select * from test where a=1 and b=1
Select * from test where a=1 order by b asc
Select * from test where order by a desc,b desc
Select * from test where c=1 order by c asc
12. 索引不是越多越好
避免使用select *
尽量使用表连接(join)代替子查询
查询的性能方面,表连接>(not)exists>(not)in
表连接最好,exists其次,in最差.