为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】:
【操作系统】:
【CPU】:
【问题描述】:select r. from (select tmp.,rownum as rn from ( select log.,log.id as keyid,lt.datatype, CASE WHEN hrm.lastname IS NULL THEN hrmm.lastname ELSE hrm.lastname END AS operatorName, ll.labelname as logtypelabelname ,sm.labelname as logsmalltypelabelname ,tl.labelname as belongtypelabelname,gl.labelname as groupnamelabelname from ecology_biz_log log left join ECOLOGY_BIZ_LOG_TYPE lt on log.logtype=lt.id left join hrmresource hrm on log.userid = hrm.id LEFT JOIN hrmresourcemanager hrmm ON log.userid = hrmm.id left join htmllabelinfo ll on ll.indexid = log.logtypelabel and ll.languageid=7 left join htmllabelinfo sm on sm.indexid = log.logsmalltypelabel and sm.languageid=7 left join htmllabelinfo tl on tl.indexid = log.belongtypelabel and tl.languageid=7 left join htmllabelinfo gl on gl.indexid = log.groupNameLabel and gl.languageid=7 where (isdetail=0 or isdetail is null) and (( 1=1 and logType in ( 2 ) and logSmallType in ( 14 ) and belongTypeTargetId in ( '796522' ) ) or ( 1=1 and logType in ( 2 ) and belongType in ( 14 ) and belongTypeTargetId in ( '1086040','1086041','1086042','1086043','1086044','1086045','1086046','1086047','1086048','1086049','1086050','1086051','1086052','1086053','1086054','1086055','1086056','1086057','1086058' ) ) ) order by log.id desc ) tmp where rownum <= 100 ) r where 1=1 and r.rn>=1;
这个sql为什么不走索引 应该如何优化下
1、不走索引有可能是过滤条件列没有索引
2、索引列过滤性不高,优化器觉得不走更好
3、统计信息有误,先收集下相关表的统计信息
4、谓词条件属性与实际不符,需要类型转换导致
5、组合索引,非前置列
6、复杂SQL,需根据表结构和数据量等测试分析
达梦数据库优化器的路线的选择代价小的路线在走,不走索引可以通过如下几种方法解决:
1、添加 hint 强制走索引;
2、通过新建或者修改索引的方法重新调整部分索引,清理统计信息,更新sql相关表的统计信息来调整优化器路线;
3、使用sysdba用户登录,登录monitor监视器工具(和manager客户端工具在同一个路径下),在性能优化向导里执行sql,检查哪些索引没有创建;
方便把建表语句发出来吗?
如下是几条优化建议:
简化条件:检查 where 条件,去除不必要的条件,避免复杂的条件组合。
避免函数操作:确保索引列不在条件中进行函数运算等操作。
子查询优化:若子查询复杂,考虑改写为连接查询或使用临时表,提高查询效率。