15个SQL优化的技巧

  1. 避免使用SELECT *:在查询时,只选择需要的列,而不是使用SELECT *。这样可以减少不必要的数据查询和传输。

    sql 复制代码
    SELECT name, age FROM user WHERE id = 1;
  2. 使用UNION ALL代替UNION :使用UNION ALL来获取所有数据,包括重复的,以避免UNION的排重操作,从而减少CPU资源消耗。

    sql 复制代码
    (SELECT * FROM user WHERE id = 1)
    UNION ALL
    (SELECT * FROM user WHERE id = 2);
  3. 小表驱动大表 :使用小表的数据集来驱动大表的数据集,例如使用INEXISTS。根据实际情况选择适合的关键字。

    sql 复制代码
    SELECT * FROM order WHERE user_id IN (SELECT id FROM user WHERE status = 1);
  4. 批量操作:批量插入或更新数据,以减少数据库请求次数,提升性能。

    sql 复制代码
    INSERT INTO order(id, code, user_id) VALUES(123, '001', 100), (124, '002', 100), (125, '003', 101);
  5. 多用LIMIT :使用LIMIT来限制查询结果的数量,提高查询效率。同时,在删除或修改操作中使用LIMIT以避免误操作。

    sql 复制代码
    SELECT id, create_date FROM order WHERE user_id = 123 ORDER BY create_date ASC LIMIT 1;
  6. 限制IN子句中的值 :对IN子句中的值进行限制,避免查询大量数据导致接口超时。

    sql 复制代码
    SELECT id, name FROM category WHERE id IN (1, 2, 3...100) LIMIT 500;
  7. 增量查询:通过条件限制,每次只查询部分数据,提高同步效率。

    sql 复制代码
    SELECT * FROM user WHERE id > #{lastId} AND create_time >= #{lastCreateTime} LIMIT 100;
  8. 高效的分页 :使用LIMIT进行分页时,对于大数据量的表,使用ID范围查询代替偏移量分页。

    sql 复制代码
    SELECT id, name, age FROM user WHERE id > 1000000 LIMIT 20;
  9. 用连接查询代替子查询:使用连接查询代替子查询,减少临时表的创建和删除,提高查询效率。

    sql 复制代码
    SELECT o.* FROM order o INNER JOIN user u ON o.user_id = u.id WHERE u.status = 1;
  10. 控制JOIN表的数量 :控制JOIN表的数量,避免复杂的索引选择和性能消耗。

    sql 复制代码
    SELECT a.name, b.name, c.name FROM a INNER JOIN b ON a.id = b.a_id INNER JOIN c ON c.b_id = b.id;
  11. 注意JOIN的使用 :使用INNER JOIN时,小表驱动大表;使用LEFT JOIN时,注意左边应为小表。

    sql 复制代码
    SELECT o.id, o.code, u.name FROM order o INNER JOIN user u ON o.user_id = u.id WHERE u.status = 1;
  12. 控制索引的数量:合理控制索引数量,避免过多的索引导致性能消耗。

  13. 选择合理的字段类型 :根据数据特点选择合适的字段类型,如CHARVARCHAR,以及数字类型和字符串类型的选择。

    sql 复制代码
    ALTER TABLE order ADD COLUMN code CHAR(20) NOT NULL;
  14. 提升GROUP BY的效率 :在GROUP BY前使用WHERE条件过滤数据,减少分组操作的数据量。

    sql 复制代码
    SELECT user_id, user_name FROM order WHERE user_id <= 200 GROUP BY user_id;
  15. 索引优化 :使用EXPLAIN命令检查SQL语句是否走索引,避免索引失效,并在必要时使用FORCE INDEX强制使用特定索引。

    sql 复制代码
    EXPLAIN SELECT * FROM `order` WHERE code='002';
相关推荐
Lee川3 小时前
面试通关:JWT 认证与双 Token 机制深度解析
后端·面试
想学习java初学者6 小时前
SpringBoot整合Vertx-Mqtt多租户(优化版)
java·spring boot·后端
念何架构之路6 小时前
MySql常见ORM
数据库·mysql
平凡码工人6 小时前
navicat 17 lite 安装教程
mysql
Csvn6 小时前
Python 性能优化与 Profiling 工具
后端·python
不减20斤不改头像7 小时前
手机一句话开发贪吃蛇!TRAE SOLO 移动端 AI 编程实测
前端·后端
河阿里7 小时前
SQL:深分页问题深度解析
数据库·sql
涤生大数据7 小时前
AI时代,SQL该何去何从?
数据库·人工智能·sql
明月_清风7 小时前
K8s 从入门到上手:核心概念+常用工具全解析
后端·kubernetes
随风,奔跑8 小时前
Nginx
服务器·后端·nginx·web