Использование ORDER BY в индексированном столбце не очень хорошая идея.На самом деле целью использования индекса является ускорение поиска, чтобы столбец индекса помогал поддерживать данные в отсортированном порядке.Я предложу вам использовать ORDER BY в неиндексированном столбце.Я выполнил пример запроса на MySql и получил результат, как указано ниже.
SELECT
ci.id AS item_id, ci.brand_id, ci.category_id,
ci.item_size_type, ci.is_express_processing, ci.packing,
ci.parent_service_id, ci.product_id, ci.size,
ci.create_date AS item_create_date, cis.service_id, cis.quantity
FROM
cart AS c
INNER JOIN
cart_items AS ci ON ci.cart_id = c.id
LEFT JOIN
cart_item_services AS cis ON cis.item_id = ci.id
WHERE
c.id = 144
ORDER BY
c.create_date;
Здесь я использую ORDER BY
для неиндексированного столбца create_date
, и результат выглядит следующим образом:
# Time: 2017-11-03T10:30:33.237056Z
# User@Host: root[root] @ localhost [] Id: 3
# Query_time: 0.000340
# Lock_time: 0.000154 Rows_sent: 2 Rows_examined: 4
А теперь я собираюсь использовать ORDER BY
для индексированного столбца item_id
:
SELECT
ci.id AS item_id, ci.brand_id, ci.category_id,
ci.item_size_type, ci.is_express_processing, ci.packing,
ci.parent_service_id, ci.product_id, ci.size,
ci.create_date AS item_create_date, cis.service_id, cis.quantity
FROM
cart AS c
INNER JOIN
cart_items AS ci ON ci.cart_id = c.id
LEFT JOIN
cart_item_services AS cis ON cis.item_id = ci.id
WHERE
c.id = 144
ORDER BY
item_id;
Теперь я получил следующий результат.
# Time: 2017-11-03T10:30:47.802392Z
# User@Host: root[root] @ localhost [] Id: 3
# Query_time: 0.000383
# Lock_time: 0.000176 Rows_sent: 2 Rows_examined: 4
Таким образом, в приведенном выше результате мы видим, что индексированные столбцы Query_time и Lock_time выше, чем неиндексированные столбцы.
Для более подробного анализа стандартов и производительности запросов вы можете обратиться по ссылке ниже:
http://mysql.rjweb.org/doc.php/index_cookbook_mysql