以下查询的复杂性(每个查询的扫描行)是什么?
select col_name from table where id in (list).
表在id上编制索引。 是否每行都将被扫描并仅获取列表中具有id的行,或者它将仅访问列表中具有id的行?
答案 0 :(得分:0)
谢谢, 我找到了这个问题的答案。 以下查询可以告知特定查询命中访问的行数。
explain select col_name from table where id in (list).
答案 1 :(得分:0)
template<typename... Ts> struct MaxSizeof {
static constexpr size_t value = 0;
};
template<typename T, typename... Ts> struct MaxSizeof<T, Ts...> {
static constexpr size_t value = std::max(sizeof(T), typename MaxSizeof<Ts...>::value);
};
可能会给你一个猜测。以下将是准确的:
EXPLAIN
示例:
FLUSH STATUS;
SELECT ...;
SHOW SESSION STATUS LIKE 'Handler%';
请注意,读取了13行,而不是表中的5484行。
(这需要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)
上的KEY。)