假设存在A(aid,aname),b(bid,bname,aid)两张表
1:避免使用In或not in 可使用exists使用
IN操作
SELECT*FROMaWHEREidIN(SELECTaidFROMb);
In操作是将b表中的所有ID从数据库中存储到内存中,然后进行比较,这种操作在b表中的数据相对较少时,效率是比较高的,类似于讲所有数据存到一个集合之中,然后使用contains,但是如果数据库量大,则每次的比对都很耗时间,因为每次都需要对数据进行遍历,
not in操作是不走索引查询的,所以非常不推荐使用此关键字,可使用not EXISTS代替使用
EXISTS操作SELECT*FROMaWHEREEXISTS(SELECT*FROMbWHEREb.aid=a.id );
EXISTS 操作是则是从数据库中进行查询,b表中的数据只查询一次,所以在b表中的数据量比较大的时候使用此关键字效率更高
2:is null 和not null操作
因为索引是不会对空值进行索引,所以效率比较低
3:like操作符
SELECT*FROMaWHEREidLIKE'%123%';
这种使用方法,因为无法确定首字母,所以不会进行索引查询,则效率较低,可在适当情况使用
SELECT*FROMaWHEREidLIKE'123%';SELECT*FROMaWHEREidLIKE'1%3';
这种使用方法可以进行索引查询 效率较高
4:not
取反,此操作不使用索引,可以使用运算符替换
5:尽量不适用select *
可使用具体的属性名,相对提高效率
6:尽量使用where代替having
因为having的操作顺序靠后是查询完之后才进行的,具体关键字顺序请看https://www.cnblogs.com/huayuxiaoxiang/p/10077147.html
6:尽量不要在SQL中进行复查操作,会大幅增加数据库的负担
领取专属 10元无门槛券
私享最新 技术干货