首页 > 解决方案 > 如果我们要传递大列表,则获取 mysql 中行数的最佳实践

问题描述

我想获取具有 sec_id 的行数,并且 ref_id 应该出现在列表中ref_list。ref_list 的大小约为 300。table 的大小约为 70,000。

我目前正在使用这种技术来获取满足上述条件的行数。

SELECT count(*) FROM table where sec_id=? and ref_id IN (?,?,...,?)

执行时间在 20 毫秒到 30 毫秒之间。

但是这个查询将被执行大约 1200+ 次,所以总的执行时间变成了大约 45s 到 50s。

有没有其他方法可以修改上述查询以减少时间?

该表使用idasprimary keyref_idkey 类型 as multiple进行索引

数据库 -> MySQL

标签: mysqlsqlhibernatejpa

解决方案


为查询中的所有条件创建特定索引。

在你的情况下:

    create index your_index_name on table (sec_id, ref_id);

尽量避免在 where 条件中添加函数。函数可能不使用索引。

如果您的某些重复请求相等,还可以考虑使用 mysql 查询缓存。


推荐阅读