SQL優化淺談
阿新 • • 發佈:2018-12-06
假設存在A(aid,aname),b(bid,bname,aid)兩張表
1:避免使用In或not in 可使用exists使用
IN操作
SELECT * FROM a WHERE id IN (SELECT aid FROM b);
In操作是將b表中的所有ID從資料庫中儲存到記憶體中,然後進行比較,這種操作在b表中的資料相對較少時,效率是比較高的,類似於講所有資料存到一個集合之中,然後使用contains,但是如果資料庫量大,則每次的比對都很耗時間,因為每次都需要對資料進行遍歷,
not in操作是不走索引查詢的,所以非常不推薦使用此關鍵字,可使用not EXISTS代替使用
EXISTS 操作 SELECT * FROM a WHERE EXISTS ( SELECT * FROM b WHERE b.aid = a.id );
EXISTS 操作是則是從資料庫中進行查詢,b表中的資料只查詢一次,所以在b表中的資料量比較大的時候使用此關鍵字效率更高
2:is null 和not null操作
因為索引是不會對空值進行索引,所以效率比較低
3:like操作符
SELECT * FROM aWHERE id LIKE '%123%';
這種使用方法,因為無法確定首字母,所以不會進行索引查詢,則效率較低,可在適當情況使用
SELECT * FROM a WHERE id LIKE '123%'; SELECT * FROM a WHERE id LIKE '1%3';
這種使用方法可以進行索引查詢 效率較高
4:not
取反,此操作不使用索引,可以使用運算子替換
5:儘量不適用select *
可使用具體的屬性名,相對提高效率
6:儘量使用where代替having
因為having的操作順序靠後是查詢完之後才進行的,具體關鍵字順序請看https://www.cnblogs.com/huayuxiaoxiang/p/10077147.html
6:儘量不要在SQL中進行復查操作,會大幅增加資料庫的負擔