0
什麼是以下查詢的複雜性(每個查詢的掃描行)?選擇查詢的複雜性,其中列表中的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
可能會給你瞎猜。下面將是精確的:
FLUSH STATUS;
SELECT ...;
SHOW SESSION STATUS LIKE 'Handler%';
實施例:
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)
注意,13行被讀取,而不是5484是在表中。 (這需要一個關於id
的KEY。)