mysql查询,=和IN之间的性能不同

时间:2017-10-09 13:55:23

标签: mysql sql

为什么这两个查询之间存在时间执行的差异,即使它们从同一个表中检索相同数量的行?

const props = {};
const reader = new FileReader;
reader.onload = () => {
  props["file"] = reader.result;
}

for (let [key, prop] of new FormData(form)) {
  if (!prop instance of File) {
    props[key] = prop;
  } else {
    reader.readAsDataURL(prop);
  }
}

const json = JSON.stringify(props);

... ...

select cognome, nome, lingua, count(*)
from archivio.utente
where cognome in ('rossi','pecchia','pirono')
group by cognome, nome, lingua;

779行(0.03秒)

…
| Rossi                | Mario   | it     |        1 |
| Pironi               | Luigi   | it     |        1 |
| Pecchia              | Fabio   | it     |        1 |
+----------------------+---------+--------+----------+

... ... ...

select cognome, nome, lingua, count(*)
from archivio.utente
where nome='corrado'
group by cognome, nome, lingua;

737行(0.47秒)

1 个答案:

答案 0 :(得分:0)

来自mysql文档:

https://dev.mysql.com/doc/refman/5.7/en/explain-output.html#explain-join-types

当我们使用时

仅检索给定范围内的行,使用索引选择行。 输出行中的键列指示使用哪个索引。

当我们使用=

对每个行组合

进行全表扫描

因此在一种情况下,所有行都被检索和比较,在另一种情况下只是一个范围。