【发布时间】:2014-02-16 00:28:14
【问题描述】:
如何将这个查询“转换”为不使用 IN,我读到的 in 与存在相比很慢
SELECT * FROM kx_examenes_diagnostico.examenes t1 WHERE NOT EXISTS (
SELECT * FROM kx_examenes_diagnostico.examenes_aplicados t2 WHERE t2.alumno_id=812 AND t2.examen_id=t1.examen_id
) AND t1.examen_id IN (1,2,3,4,5,10,11,12,13,,50,159,635,456,780,12,63,45);
我使用 MySQL,我不知道如何使用我比较的值(在 in 子句内部)我必须使用 OR 的存在吗?有可能吗?
谢谢
【问题讨论】:
-
in当你有一个常量列表时很好。性能问题是存在子查询时。 -
当
IN子句在主键/索引列上选择时,它几乎是尽可能快的,因为该行可以直接从索引中获取,应该可以通过二进制搜索进行排序。跨度> -
“In”和“exists”不一定做同样的事情。两者都有时间和地点。获得正确的结果应该是最重要的。然后你就可以担心速度了。