没有一些具体的例子不大好回答,SQL的优化有很多方法,不同的数据库不一样.不知道你用的是什么?最好举例说明

解决方案 »

  1.   

    在多表查询时,做个关联。如:select * from a,b where a.id=b.id
                                                ^^^^^^^^^^^^^^^
      

  2.   

    无法回答,查资料.最好来一instance
      

  3.   

    笛卡儿积是正常的,是数据库的一种基本操作,不能避免的。要是连这也不要,还叫什么关系型数据库?
    如果出现数据不正常的重复,一定是关联的条件不够准确,检查你的SQL语句。
      

  4.   

    目前用的是sql server。
    出现冗余是否只是where条件不够?
      

  5.   

    我的例子较大,sql语句有上百行。
    查询速度应该怎么优化?
      

  6.   

    什么叫做“sql语句有上百行”,再多也是一句一句来得,不是吗?如果where子句写的好一点,一般是不会出现重复的信息;
    当然,一对多,多对多的表是有可能的;
    一对多的表一般是主表中的信息重复,主表和子表存在笛卡儿积,这是正常的;
    多对多的表一般就比较难说啦,有可能子句写的不好,就出现一大堆的重复数据;查询速度想快,使用索引,不要一次结果太多;
      

  7.   

    简单地说一条可以优化的语句,算是抛砖引玉吧!
    如果你的语句是查询在一个表中存在,另一个表中不存在记录时,不要使用not in,最好使用左连接。速度可以从1秒减到0.01秒.
      

  8.   

    to bluepower2008(蓝色力量),
    还有优化的语句吗?再说点好吗?
      

  9.   

    查询时的速度很大程度上还取决于你的表的索引建的如何,要从大到小(就是说可以以下把数据量减少很多,比如你的表里有日期和部门,你检索的时候where rq = p_rq and bm = p_bm,那你就要在索引里把日期建在前面,这样一下可以将数据减少至1/365所以速度就快了,同时查询时使用频率高的在前,因为如果where条件里不包含索引中的字段,则索引就会相应的失效,尤其是没有包含第一个索引字段的话就完全失效了.
      

  10.   

    这个题目太大,我的看法是:要建立好索引,然后尽可能合理的使用索引,写Sql时要尽量减少表扫描和创建临时表,另外写完一条复杂的SQL后要反复测试,观察效果。最好使用数据库的一些调试工具来观察。^_^
      

  11.   

    有什么专门的sql调试或测试工具吗?
      

  12.   

    sqlserver自带的查询分析器就很不错,有图形形象地显示,不用去看给出一大堆数据的执行计划了。