本帖最后由 shary 于 2012-12-7 10:05 编辑
最近细细观察了一下平台的运行效率,发现一个问题,
1、在视图过滤中写了如下语句:SELECT * FROM tlk_人口基本信息表 ,设置分页显示前10条。结果在tomcat中发现运行时语句变成:SELECT * FROM (SELECT * FROM (SELECT * FROM tlk_人口基本信息表 where 1=1) table_orderby WHERE DOMAINID ='11e1-0cd5-0fcf0b69-b1c4-2b80c67659ed' ORDER BY table_orderby.ID ) AS TB LIMIT 0,10 加上统计SELECT COUNT(*) FROM(SELECT * FROM tlk_人口基本信息表 where 1=1) doc WHERE oc.DOMAINID ='11e1-0cd5-0fcf0b69-b1c4-2b80c67659ed';因数据量太大,40多万条,造成查询时间400多秒。
2、换成DQL过滤方式,运行语句分别变成:SELECT * FROM (SELECT* FROM (SELECT d.* FROM SHGL.TLK_人口基本信息表 d WHERE d.ISTMP=0 AND d.DOMAINID='11e1-0cd5-0fcf0b69-b1c4-2b80c67659ed' AND ((1 = 1))) table_orderby ORDER BY table_orderby.ID ) AS TB LIMIT 0,10 和SELECT COUNT(*) FROM SHGL.TLK_人口基本信息表 d WHERE d.ISTMP=0 AND ((1 = 1)) AND d.DOMAINID='11e1-0cd5-0fcf0b69-b1c4-2b80c67659ed',查询时间360多秒。
3、把SQL过滤语句放在查询分析器中SELECT * FROM tlk_人口基本信息表 where DOMAINID ='11e1-0cd5-0fcf0b69-b1c4-2b80c67659ed' ORDER BY ID LIMIT 0,10 和SELECT COUNT(*) FROM tlk_人口基本信息表 where DOMAINID ='11e1-0cd5-0fcf0b69-b1c4-2b80c67659ed' 查询时间为2秒多。
如下图所示
SQL语句为何会在平台中加成三层循环的方式了,这样造成效率太低。 |