一、WHERE后面的条件顺序影响
比如表student,无索引
id name sex age
1 lily 1 3
2 tom 0 25
3 john 0 18
4 daniel 1 40
5 joy 1 45
Select * from zl_yhjbqk where sex= 1 and age > 35
Select * from zl_yhjbqk where age > 35 and sex= 1
第一句,比较了8次,第二句,比较了7次。所以第二句执行效率高。
二、关联查询表顺序的影响
BIG大表,SMALL 小表
select * from BIG,SMALL where Big.bid = SMALL.sid;
select * from BIG,SMALL where SMALL.sid= Big.bid;
理论上大表在前,小表在后,效率高,现代数据库技术会自动优化,执行无差异。
三、避免大的删除
一条语句一次性执行删除多条数据的操作,则可能需要一次锁住很多数据,事务日志被占满,系统资源被消耗、很多小的但重要的查询被迫排队。
如果将一个大的删除分解成多个较小的删除操作,可以将服务器压力分散,减少删除时锁的等待时间,减少MySQL主从复制的延迟,尽可能小地影响MySQL性能。
四、多表查询应分解
分解关联查询,尽量避免一条SQL实现多表关联查询。拆分SQL,对每个要关联的表进行单表查询,然后将结果在应用程序中进行关联。
因为这样可以减少锁开销,业务与数据分离得更彻底,避免可能的对数据的重复访问,将计算压力转移到应用服务器。