mysql - 如果我们要传递的列表很大,则获取 mysql 中行数的最佳实践

标签 mysql sql hibernate jpa

我想获取具有 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/

相关文章:

php - 勾选连接表中的复选框

mysql - 从 Webmatrix 导出 MySQL 数据库安装脚本

MySQL 数据库为什么 Õ 在搜索时返回为 O

php - 选择....用于更新和 if 语句与 php

mysql - 以不同的方式编写查询相同的方法

sql - 选择优先级最高的行

java - org.hibernate.engine.jdbc.spi.SqlExceptionHelper 表 "Club"未找到

mysql - 1054 - 'XXX' 中的未知列 'on clause'

java - 具有多级连接的 Hibernate Criteria

java - JPA 关系中列的自定义命名