sql语句性能优化
select top 10 * from ViewBgbh where 综合判定='/' and (报告编号 in (select 报告编号 from ViewJyxm where 结果!='')) and (报告编号 not in (select 报告编号 from ViewJyxm where 结果='')) order by 报告编号以上在sql2008中需2秒,有点长,有何优化方法(exists方法一样) --------------------编程问答-------------------- 字段加索引;
不用或少用in,改用别的方法。 --------------------编程问答--------------------
我改用exists,效果一样 --------------------编程问答-------------------- sql似乎是矛盾的
报告编号 in (select 报告编号 from viewjyxm where 结果!='')
报告编号 not in (select 报告编号 from viewjyxm where 结果='')
这两句的效果是一样的吧? --------------------编程问答-------------------- 楼主的数据库结构设计的不好。书写代码坏毛病也多。
常用与 where、 order 的字段尽量设计得值重复性少,select * 不到非用不可别用它,筛选出有用的字段就行了。
否则就是建立索引,还会多出个“键查找”的分支。
ViewJyxm 表或者说Jyxm 表上 ,“报告编号”和 “结果”字段建立符合索引。
ViewBgbh 表或者说Bgbh 表上,“综合判定”“报告编号”建立复合索引,考虑到 select 将要筛选字段,最好添加这些字段进入 索引覆盖里面。。 --------------------编程问答-------------------- 把要查询条件的字段加索引,如4楼大侠所说,尽量不要用*,只查询用到的字段就可以了 --------------------编程问答-------------------- 数据量小,根本看不出来。exists使用起来肯定效果好点。 --------------------编程问答-------------------- exists 跟 in 速度是一样,大家作作试验就知道了,别光看网上瞎扯淡的优化。 --------------------编程问答--------------------
+1 --------------------编程问答-------------------- 需要字段检索,不需要的不检索, --------------------编程问答--------------------
不矛盾,viewjyxm中有同一报告编号有多条数据,结果有为空的也有不为空的,我需要的是全部不为空的,并且必须在viewjyxm存在,因此需要应用上述的sql --------------------编程问答-------------------- 查询的字段加索引 --------------------编程问答-------------------- select top 10 a.* from ViewBgbh as a
inner join ViewJyxm as b on a.报告编号=b.报告编号 and a.综合判定='/' and b.结果!=''
inner join ViewJyxm as c on a.报告编号<>b.报告编号 and a.综合判定='/' and b.结果=''
order by 报告编号
然后再加索引,少用in ,not in之类的。 --------------------编程问答-------------------- 别写sql了,改成存储过程吧!
还有能够不用*的话,就别用! --------------------编程问答--------------------
思路新,只是结果不太准确 --------------------编程问答-------------------- 个人能力有限,语句是想不出来好的。不过你在报告编号上建立索引会快很多。 --------------------编程问答-------------------- 目前还是没有好的解决方法 --------------------编程问答-------------------- 中文字段 看着不舒服 --------------------编程问答-------------------- 改用存储过程吧,先取数据然后通过代码在处理
思路就是先取所有结果不为空的(一次查询),再取所有结果为空的(第二次查询),然后再做一遍检查,去掉结果为空的
你的sql重复查询次数太多了
补充:.NET技术 , ASP.NET