1. 程式人生 > >SQL優化淺談

SQL優化淺談

假設存在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
    a
WHERE 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中進行復查操作,會大幅增加資料庫的負擔