数据查询速度达到40S,设置索引没有效果,求教sql优化意见

数据查询设置索引后,查询速度依然缓慢,最后查出4000多条数据,

sql:

select --此处省略120个字段项-- WHERE ifhistory=0 and unit_id like '%关键词%' and audit_code=? and service_op=? order by design_date desc,build_unit


阅读 4.3k
7 个回答

建议将模糊查询放在最后,将更明确的标识查询往前放例如id,name等,当然也有人证明过 oracle 中where条件执行顺序是从右到左,这个可能要因数据库而异,或者自己进行一下测试!
另外像楼上说的一样,最好尽量少使用或不使用模糊查询或将 like '%%' 改为 like '%'
然后你的 表中为什么会有什么多字段.....

新手上路,请多包涵

建议先查出所需数据的主键,之后再根据主键查询所需的字段

1.查询字段太多
2.like%xx%不会启用索引,可以换为like x%

觉得还是要从索引上找原因,把索引弄好,其它优化方式对速度提升应该不如索引明显

like % %不奇怪。。无法使用索引

表的总数据量多少? 符合audit_code=? and service_op=? 的条件记录数数多少?

根据个人经验,1亿数据量的表,查询出3000条左右的数据,索引合适的话需要7-8秒时间,当然这个只能参考,和硬件环境关系比较大。

这个语句,建议按照audit_code 和 service_op联立联合索引,然后看一下执行计划是否能使用索引。

除了楼上说的那些,请加上limit,如果数据较多就分页查询

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题