2

多くの SQL クエリでは、最新の行を取得するために "order by id desc" が必要なコンポーネントです。一般的なクエリは次のようになります

select * from table X where some_condition order by id desc

一般に、「ID による順序付け」はクエリを非常に遅くしますか?

具体的には、次のようなクエリの場合:

select * from table X where some_col = some_value order by id desc

クエリを高速化するためにインデックス (some_col, id) を追加する必要は本当にあるのでしょうか?

いずれの場合も、ID は自動インクリメンタルであると想定されます。


私の混乱は、オーダーバイ最適化に関する次のガイドラインから来ています。

http://dev.mysql.com/doc/refman/5.0/en/order-by-optimization.html

4

3 に答える 3

2
select * from table X where some_col = some_value order by id desc

このようなクエリでは、確かに some_col にインデックスが必要です。私によると、(some_col)のインデックスは(some_col、id)よりも十分に優れているはずです。

MySQL マージ インデックスは、並べ替えに id のインデックスを使用するのに役立ちます。

また、(id,some_Col) インデックスは some_col で検索するときに使用されませんが、(some_col, id) は使用されます。

于 2013-03-17T16:52:28.733 に答える
2

MySql は主キーを innodb テーブルのインデックスの一部として追加するため、(some_col) のインデックスで十分です。したがって、暗黙的に (some_col, id) をインデックスとして持つことになります。詳細については、この記事を確認してください: Can MySQL use primary key values from secondary index?

于 2015-11-23T12:52:00.280 に答える
0

最初の行を取得するには、これも使用できます。

SELECT *
FROM tableX
WHERE id = (SELECT MIN(id)
            FROM tableX
            WHERE some conditions)

そして最後にこれ:

SELECT *
FROM tableX
WHERE id = (SELECT MAX(id)
            FROM tableX
            WHERE some conditions)

もちろんそうです。インデックス オンidとインデックス オンsome_colは、クエリを高速化するのに非常に役立ちます。

于 2013-03-17T16:51:23.547 に答える