次のような値とハッシュの表を考えてみましょう。
+------------+----------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------+----------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| val | char(9) | NO | | NULL | |
| val_hashed | char(50) | YES | | NULL | |
+------------+----------+------+-----+---------+----------------+
次のクエリは0.00秒で終了します。
SELECT * FROM hashes ORDER BY 1 DESC LIMIT 1;
ただし、このクエリには3分17秒かかります。
SELECT val FROM hashes ORDER BY 1 DESC LIMIT 1;
クエリの実行中にプロセスリストがstatusとして表示されることがわかりますSorting result
。状況は完全に再現可能です。INSERT
テーブルで操作を継続的に実行する別のプロセスがあることに注意してください。
クエリよりも具体的なクエリの実行に時間がかかるのはなぜ*
ですか?*
パフォーマンス上の理由から、クエリは避けるべきだと常に考えてきました。
ORDER BY NUMBER
構文は非常にエラーが発生しやすくなります。
最後のコメントに
—
lc
SELECT *
列インデックスを追加すると、ORDER BY
どの列がソートされているかわかりにくくなります。これは、*
s ...
@lc。、どういう意味ですか?
—
Pacerier
@Pacerier
—
LCを。
*
は明示的ではないということです。「第三のいずれかでソート私のすべての列を与えると」言っては、「スーパーマーケットに行くとあなたが渡されたどのように多くのトラフィックライトを教えて」と言っとして決定論などについてです
id
を使用して最初の行を見つけます。2番目の方法では、(インデックス化されていない)val
列で完全な結果をソートする必要があります。