我想获取具有 sec_id 的行数,并且 ref_id 应该出现在列表中,比如 ref_list
。
ref_list 的大小约为 300。
表的大小约为 70,000。
我目前正在使用这种技术来获取满足上述条件的行数。
SELECT count(*) FROM table where sec_id=? and ref_id IN (?,?,...,?)
执行时间为 20 毫秒到 30 毫秒。
但是这个查询将被执行大约 1200 次以上,所以总的执行时间变成了大约 45 到 50 秒。
是否有任何其他方法可以改进上述查询,以便花费更少的时间?
该表以 id
作为 primary key
索引,并且
ref_id
键类型为多个
数据库 -> MySQL
最佳答案
不要运行多个查询。使用 sec_id
/ref_id
的所有值创建一个临时表,然后运行单个聚合查询。假设您希望每个 sec_id
一行,那么:
select t.sec_id, count(t.sec_id)
from sec_ref sr left join
t
on t.sec_id = sr.sec_id and t.ref_id = sr.ref_id
group by t.sec_id;
这将花费超过 20-30 毫秒的时间。但您只需要调用一次。
关于mysql - 如果我们要传递的列表很大,则获取 mysql 中行数的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66473332/