次のクエリの複雑さ(クエリごとにスキャンされる行)は何ですか?リストとIDのidがテーブルのインデックス番号
select col_name from table where id in (list).
テーブルはidでインデックスされます。 すべての行は、リスト内にidを持つか、リスト内にidを与えている行だけにアクセスしようとしていますか?
次のクエリの複雑さ(クエリごとにスキャンされる行)は何ですか?リストとIDのidがテーブルのインデックス番号
select col_name from table where id in (list).
テーブルはidでインデックスされます。 すべての行は、リスト内にidを持つか、リスト内にidを与えている行だけにアクセスしようとしていますか?
ありがとう、 私はこの質問の答えを見つけました。 次のクエリは、特定のクエリヒットに対してアクセスされた行の数を示します。
explain select col_name from table where id in (list).
EXPLAIN
あなたにguesstimateを与える可能性があります。以下は正確であろう。
FLUSH STATUS;
SELECT ...;
SHOW SESSION STATUS LIKE 'Handler%';
例:13行が読み出されたこと
mysql> SELECT city, population FROM canada WHERE id IN (295560,295007,297104,293500,293583,297001,291726,296573,296239,295210,293022,295192,293038);
+----------------+------------+
| city | population |
+----------------+------------+
| Abbotsford | 151685 |
| Drummondville | 59489 |
| Duncan | 22199 |
| Glace Bay | 21504 |
| Grande Prairie | 41463 |
| New Glasgow | 20322 |
| Orangeville | 32641 |
| Ottawa | 874433 |
| Prince George | 65558 |
| Saskatoon | 198957 |
| Stratford | 30234 |
| Waterloo | 110800 |
| White Rock | 66450 |
+----------------+------------+
13 rows in set (0.01 sec)
mysql> show session status like 'Handler%';
+----------------------------+-------+
| Variable_name | Value |
+----------------------------+-------+
| Handler_commit | 1 |
| Handler_delete | 0 |
| Handler_discover | 0 |
| Handler_external_lock | 2 |
| Handler_mrr_init | 0 |
| Handler_prepare | 0 |
| Handler_read_first | 0 |
| Handler_read_key | 13 | -- Note
| Handler_read_last | 0 |
| Handler_read_next | 0 |
| Handler_read_prev | 0 |
| Handler_read_rnd | 0 |
| Handler_read_rnd_next | 0 |
| Handler_rollback | 0 |
| Handler_savepoint | 0 |
| Handler_savepoint_rollback | 0 |
| Handler_update | 0 |
| Handler_write | 0 |
+----------------------------+-------+
18 rows in set (0.00 sec)
注意、ないテーブルである5484。 (これにはid
のキーが必要です)