mysql - 如果我们要传递大列表,则获取 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。
有没有其他方法可以修改上述查询以减少时间?
该表使用id
asprimary key
和
ref_id
key 类型 as multiple进行索引
数据库 -> MySQL
解决方案
为查询中的所有条件创建特定索引。
在你的情况下:
create index your_index_name on table (sec_id, ref_id);
尽量避免在 where 条件中添加函数。函数可能不使用索引。
如果您的某些重复请求相等,还可以考虑使用 mysql 查询缓存。
推荐阅读
- api - Jenkins API 给出拒绝访问错误
- scala - 我们如何对 rdd 中的多个值进行分组?
- r - 在数据帧中使用 R 中的时间插值时出现 na.spline 的问题
- angular - Angular 8 记住数据
- reactjs - 具有多个输入和状态更改的 Reactjs 表单
- angular - 使用严格的 Content-Security-Policy (CSP) Angular - 不要使用 unsafe-inline
- azure-devops-extensions - 自定义“新工作项”仪表板扩展
- python - 如何根据python中另一个列表的索引更改列表的值?
- asp.net-mvc - 在我的视图上使用数据注释时,电子邮件验证不起作用?
- python-3.x - Python 3中的列表索引超出范围