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

原文地址:https://www.cnblogs.com/huayuxiaoxiang/p/10077577.html