SQL优化浅谈

假设存在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中进行复查操作,会大幅增加数据库的负担

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181206G1292600?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券