考虑一个示例表“salary_details”
现在,经过一些预处理后,我的 ArrayList ('user_id') 中有一些 ID。
user_id(0): 1
user_id(1): 3
user_id(2): 4
user_id(3): 6
我想做的是只过滤那些 id 的 salary = 2000。
哪种方法更好:
1.
for (int i = 0; i < user_id.size(); i++) {
SELECT ID FROM salary_details WHERE (part_id = user_id.get(i)) AND (SALARY = 2000)
}
或
2.
SELECT ID FROM salary_details
WHERE ((part_id = user_id.get(0))
OR (part_id = user_id.get(1))
OR (part_id = user_id.get(2))
OR (part_id = user_id.get(3)))
AND (SALARY = 2000)
或者,还有其他更好的选择吗?
最佳答案
使用 IN子句:
SELECT ID FROM salary_details WHERE SALARY = 2000 and part_id (in user_ids)
确切的语法取决于您的驱动程序/语言(只有一件事:使用准备好的语句,不要连接 sql 和值来构建查询)。
现在,最高效的查询
- 必须通过测量找到
- 非常依赖于您的数据和索引(使用
explain
)
关于mysql - SQL查询优化(时间),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38785623/