select * from PDL_HistoryWIPIO1 where IOTime>'2002-06-01' 
  and IOTime<'2002-06-10'如上一條語句 執行一次需要 1分42秒,PDL_HistoryWIPIO1 表當中的數據量大約是2-3百萬條記錄索引創建如下
CREATE  INDEX IX_PDL_HistoryWIPIO02 ON dbo.PDL_HistoryWIPIO1
(
IOTime,
              LotNum
)請問各位高手如何才能讓我的查詢變得更有效率,現在是非常的頭痛

解决方案 »

  1.   

    smiler007(笑一笑) 
    這種我試過了。都是一樣兒的。
    這個效率問題真的會搞死人啊!
      

  2.   

    這個問題問題不好回答,幫我解答一下下面這個問題吧。declare @PageSize int
    declare @PageIndex int
    Select @PageSize = 30
    Select @PageIndex =10
      Select top (@PageSize) * 
         (Select top (@PageSize*@PageIndex) * 
          From StknWip(nolock)
          order by LotNum desc
         )
       order by LotNum 執行時報出如下錯誤
    伺服器: 訊息 170,層級 15,狀態 1,行 7
    行 7: '(' 附近的語法不正確。
    伺服器: 訊息 170,層級 15,狀態 1,行 8
    行 8: '(' 附近的語法不正確。應該如何解決呀。
      

  3.   

    CREATE  INDEX IX_PDL_HistoryWIPIO02 ON dbo.PDL_HistoryWIPIO1
    (
    IOTime,
                  LotNum
    )
    你建的是复合索引, 单独对iotime建索引试试, 还有就是使用sql自有的查询优化器看看, 会有建索引的指导信息
      

  4.   

    godear() 好像不是這方面的問題,如果我查詢的時間是在5天以內都是可以接受的 2-3秒就出來了。
      

  5.   


    为什么要用SQL这样的东西?无论是效率还是安全性都那么烂!
    难到你们都没学过数据结构吗?
    难到就不能花一些时间来做自己的数据库吗?
      

  6.   

    如果不是需要全部数据,不要用select *,另外把索引中的LotNum去掉。不要用主键做索引
      

  7.   

    select * from PDL_HistoryWIPIO1 where IOTime>'2002-06-01' 
      and IOTime<'2002-06-05'
    union all
    select * from PDL_HistoryWIPIO1 where IOTime>'2002-06-06' 
      and IOTime<'2002-06-10'如果是這樣兒寫的話速度會快得多。