切換語言為:簡體

15個SQL最佳化的技巧

  • 爱糖宝
  • 2024-06-27
  • 2078
  • 0
  • 0
  • 避免使用SELECT *:在查詢時,只選擇需要的列,而不是使用SELECT *。這樣可以減少不必要的資料查詢和傳輸。

    SELECT name, age FROM user WHERE id = 1;

  • 使用UNION ALL代替UNION:使用UNION ALL來獲取所有資料,包括重複的,以避免UNION的排重操作,從而減少CPU資源消耗。

    (SELECT * FROM user WHERE id = 1) UNION ALL (SELECT * FROM user WHERE id = 2);

  • 小表驅動大表:使用小表的資料集來驅動大表的資料集,例如使用INEXISTS。根據實際情況選擇適合的關鍵字。

    SELECT * FROM order WHERE user_id IN (SELECT id FROM user WHERE status = 1);

  • 批次操作:批次插入或更新資料,以減少資料庫請求次數,提升效能。

    INSERT INTO order(id, code, user_id) VALUES(123, '001', 100), (124, '002', 100), (125, '003', 101);

  • 多用LIMIT:使用LIMIT來限制查詢結果的數量,提高查詢效率。同時,在刪除或修改操作中使用LIMIT以避免誤操作。

    SELECT id, create_date FROM order WHERE user_id = 123 ORDER BY create_date ASC LIMIT 1;

  • 限制IN子句中的值:對IN子句中的值進行限制,避免查詢大量資料導致介面超時。

    SELECT id, name FROM category WHERE id IN (1, 2, 3...100) LIMIT 500;

  • 增量查詢:透過條件限制,每次只查詢部分資料,提高同步效率。

    SELECT * FROM user WHERE id > #{lastId} AND create_time >= #{lastCreateTime} LIMIT 100;

  • 高效的分頁:使用LIMIT進行分頁時,對於大資料量的表,使用ID範圍查詢代替偏移量分頁。

    SELECT id, name, age FROM user WHERE id > 1000000 LIMIT 20;

  • 用連線查詢代替子查詢:使用連線查詢代替子查詢,減少臨時表的建立和刪除,提高查詢效率。

    SELECT o.* FROM order o INNER JOIN user u ON o.user_id = u.id WHERE u.status = 1;

  • 控制JOIN表的數量:控制JOIN表的數量,避免複雜的索引選擇和效能消耗。

    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;

  • 注意JOIN的使用:使用INNER JOIN時,小表驅動大表;使用LEFT JOIN時,注意左邊應為小表。

    SELECT o.id, o.code, u.name FROM order o INNER JOIN user u ON o.user_id = u.id WHERE u.status = 1;

  • 控制索引的數量:合理控制索引數量,避免過多的索引導致效能消耗。

  • 選擇合理的欄位型別:根據資料特點選擇合適的欄位型別,如CHARVARCHAR,以及數字型別和字串型別的選擇。

    ALTER TABLE order ADD COLUMN code CHAR(20) NOT NULL;

  • 提升GROUP BY的效率:在GROUP BY前使用WHERE條件過濾資料,減少分組操作的資料量。

    SELECT user_id, user_name FROM order WHERE user_id <= 200 GROUP BY user_id;

  • 索引最佳化:使用EXPLAIN命令檢查SQL語句是否走索引,避免索引失效,並在必要時使用FORCE INDEX強制使用特定索引。

    EXPLAIN SELECT * FROM `order` WHERE code='002';

0則評論

您的電子郵件等資訊不會被公開,以下所有項目均必填

OK! You can skip this field.