数据库应用优化(一)

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 协议》,转载必须注明作者和本文链接
讨论数量: 1

采用select username,password FROM table where id<$mid order by id desc limit 10

5年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!