谁能帮我优化一段sql语句(200分)

  • 主题发起人 主题发起人 流星雨夜
  • 开始时间 开始时间

流星雨夜

Unregistered / Unconfirmed
GUEST, unregistred user!
谁能帮我优化下面的语句,涉及的表很大,要很长时间才能出来<br>select serialid,shortname,filename,memo,<br>getdrawidchar(shortname) as drawidchar,getdrawidnum(shortname) as drawidnum from filelist where drawid='XX' and filename not in (select content from mis_code) <br>order by drawidchar,drawidnum<br><br>上面两个get是函数
 
drawid,filename,content &nbsp;字段加索引就快了。
 
补充一点个人浅见:<br>and filename not in (select content from mis_code)--这句是否改动一下?<br>order by drawidchar,drawidnum--去掉可加快速度
 
字段加索引可提高搜索的速度,如果记录太多的话其意义就不大了,不知楼主的具体情况是怎样的。如果是海量数据,要达到你的查询结果,SQL语句怎么优化都是没有意义的。怎么办?只有将功夫放到平时,用TEMP表,将上面语句写入一个触发器,当数据表变更时TEMP表自动变更,这样每次查询起来就一个字,快。
 
字段加索引可提高搜索的速度,如果记录太多的话其意义就不大了,-----楼上你这话说的大错特错了,数据量越大,索引的作用越明显!
 
不知你开发过海量数据库的系统没有?我估计你的说法是从书本上得来的吧?我是开发过这样的系统,才讲这样的话的。实践出真知。
 
所有的表主键和常用字段有索引,不过我的感觉,数据量太大时基本没感觉了,等10分钟和等15分钟结果都是不耐烦。<br>该语句是存储过程一段,调试时发现速度慢在这里<br>我现在也只能想到把in改成别的,可是有点复杂不太会写,希望哪位高手帮我<br>还有就是既然数据量比较大,看来做成视图也就意义不大了吧
 
第一:对两表关键字段进行索引;<br>第二:修改SQL,如下所示<br>select a.serialid,a.shortname,a.filename,a.memo,<br>getdrawidchar(a.shortname) as drawidchar,getdrawidnum(a.shortname) as drawidnum from filelist a<br>left join mis_code b on a.filename=b.content <br>where a.drawid='XX' <br>and b.content is null<br>order by a.drawidchar,a.drawidnum
 
谢谢,我去试试看
 
join,union 等联接查询我估计会更慢。试试下面这句,但并不能保证其能提高速度有多少:<br><br>and filename &lt;&gt; all (select content from mis_code)
 
谢谢以上各位,我感觉在分钟级别上差别已经不大了,不过给我提供了很好的思路<br>反正现在不急,我准备把存储过程拆解,把一些<br>select做成视图,希望会快一点,不然就是最狠的,在表里加字段,避免多表做笛卡尔集<br>该贴再放一段时间看看别人还有什么好的想法没,然后就会结贴<br>再次谢谢各位
 
来自:th_lmy, 时间:2008-12-26 21:27:42, ID:3937307<br>不知你开发过海量数据库的系统没有?我估计你的说法是从书本上得来的吧?我是开发过这样的系统,才讲这样的话的。实践出真知。 <br><br>--------------------------------------------------<br><br>你说的海量数据是多大?<br>我用过6G的TXT文件导入SQLSERVER数据库中,加索引和不加索引的效率差多了!<br>我还用过网通的业务数据从ORACLE数据库到SQLSERVER,用索引效率高多了!<br>你不要再胡说八道了!<br>--------------------------------------------------
 
把 in改成Exists
 
select serialid,shortname,filename,memo,<br>getdrawidchar(shortname) as drawidchar,getdrawidnum(shortname) as drawidnum from filelist where drawid='XX' and filename not exists(select content from mis_code where filelist.filename = mis_code.content) <br>order by drawidchar,drawidnum
 
还要看看索引栏位可选择性高低,多看看索引的基本资料吧<br>玩技术更像练金刚掌,而不是九阳神功
 

Similar threads

后退
顶部