MySql ORDER BY索引是否失效

【君莫笑】發表於2024-11-20

MySQL 中,ORDER BY 子句是否使用索引取決於多種因素,包括查詢的具體情況、索引的型別和結構、查詢中的其他條件等。

使用索引的情況
1.單列索引和 ORDER BY:
    當 ORDER BY 子句中的列有單列索引時,MySQL 可以利用該索引來加速排序。
    -- 假設 column 已經有索引 idx_column
    SELECT * FROM table ORDER BY column;
2.聯合索引和 ORDER BY:
     當 ORDER BY 子句中的列是聯合索引的一部分,並且遵循索引的順序時,MySQL 可以利用該聯合索引來加速排序。
      -- 假設有聯合索引 idx_columns (column1, column2)
      SELECT * FROM table ORDER BY column1, column2;
3.WHERE 子句和 ORDER BY:
    當 WHERE 子句和 ORDER BY 子句使用相同的索引時,MySQL 可以同時利用索引來加速篩選和排序。
    -- 假設有聯合索引 idx_columns (column1, column2)
    SELECT * FROM table WHERE column1 = 'value' ORDER BY column2;

不使用索引的情況
1.無索引的列:
  如果 ORDER BY 子句中的列沒有索引,MySQL 需要進行全表掃描並排序,這無法利用索引。
  SELECT * FROM table ORDER BY column_without_index;
2.不同索引的列:
  如果 ORDER BY 子句中的列不是聯合索引的一部分,或者列的順序不符合聯合索引的順序,MySQL 無法利用索引進行排序。
  -- 假設有聯合索引 idx_columns (column1, column2)
  SELECT * FROM table ORDER BY column2, column1; -- 不能利用索引
3.混合升降序:
  如果 ORDER BY 子句中包含的列排序方向不一致,MySQL 無法利用聯合索引。
  -- 假設有聯合索引 idx_columns (column1, column2)
  SELECT * FROM table ORDER BY column1 ASC, column2 DESC; -- 不能利用索引
4.計算列或函式:
  如果 ORDER BY 子句中使用了計算列或函式,MySQL 無法利用索引。
  SELECT * FROM table ORDER BY LENGTH(column); -- 不能利用索引

來源:https://blog.csdn.net/Gemini1995/article/details/140319879

相關文章