数据库应用优化(一)

1. 尽量避免在列上进行运算,这样会导致索引失效。例如原句为:

    SELECT * FROM table WHERE YEAR(d) >= 2019;
    //优化为
    SELECT * FROM table WHERE d>='2019-01-01'

2. 使用 JOIN 时,应该用小结果集驱动打大结果集。同时把复杂的 JOIN 查询拆分多个 Query。因为 JOIN 多个表时,可能导致更多的锁定和堵塞。例如原句为:

    SELECT * FROM a JOIN b ON a.id=b.id
    LEFT JOIN c ON c.time = a.date
    LEFT JOIN d ON c.pid=b.aid
    LEFT JOIN e ON e.cid=a.did

3. 注意 like 模糊查询的时,避免 %%,SQL 语句并未用到索引,而且是全表搜索。例如原句为:

    SELECT * FROM table WHRER name LIKE '%keyword%'
    //优化为
    SELECT column FROM table WHERE name like ‘keyword%
  1. 查询时尽量用自己需要的字段,这对查询速度不会有什么影响,但可以节省内存。例如原句为:

    SELECT * FROM table
    //优化为
    SELECT username,password FROM table

5. 批量插入语句节省交互。例如原句为:

        INSERT INTO (id,name) VALUES (1,a);
        INSERT INTO (id,name) VALUES (2,b);
        INSERT INTO (id,name) VALUES (3,c);
        //优化为
        INSERT INTO (id,name) VALUES (1,a), (2,b),(3,c)

6.limit 基数比较大时使用 between。例如原句为:

     SELECT username,password FROM table limit 1000000,10
     //优化为
     SELECT username,password FROM table where id between  1000000 and 1000010
     //between限定比limit快,所以海量数据访问时,建议用between或者where替换掉limit,但是between也有缺陷,如果id不连续。总读取的数据会少于预计数据

7. 建议不实用 rand 随机获取多条记录
8. 避免使用 NULL
9. 不要使用 count (id), 可以直接 count (*)
10. 不要做无所谓的排序操作

还有一些索引的合理使用#

          ♦️合理设计和使用索引
          ♦️在关键字的索引上,建与不建索引,查询速度相差100倍
          ♦️差的索引和没有索引效果一样
          ♦️索引并非越多越好,因为维护索引需要成本
          ♦️每个表的索引应在5个以下,应合理利用部分索引和联合索引
          ♦️不在结果集中的结果单一的列上建立索引
          ♦️建索引的字段结果集最好分布均匀,或者符合正态分布
本作品采用《CC 协议》,转载必须注明作者和本文链接