求助!!SQL查詢優化,sql 查詢優化

2025-05-13 13:10:08 字數 4724 閱讀 6405

1樓:

改isnull改成。。。基和思路如圓陸下(沒環搏腔盯境語句沒測):

select top 1 sellprice from ( select top 1 sellprice

from tpro_price

where productid = tact_and activityid = tact_and tpro_ = 0

and sellamountdown <=tact_and sellamountup >=tact_ +1 )union all select max(keepfeld) as keepfeld

from tpro_price

where productid = tact_and activityid = tact_and tpro_ = 0) a

sql 查詢優化

2樓:網友

這個查詢時間是有點雷人,通常100萬條資料以下的查詢根本用不著考慮效能的。

沒什麼可優化的。不知道你用的什麼資料庫,也不知道你的機子硬體配製。

order by 語句是最耗時的,不信去掉後會減少一半多時間。

你可以試試在id 列上做索引,應該能快一些。

3樓:網友

一定要全表查詢麼。

如果不需要,只是查某幾個欄位的話,在欄位上加索引。

4樓:網友

在你要order by 的欄位建立 簇式索引(clustered index),估計order by 的效能會幾百倍以上的提公升。

查詢sql的優化

5樓:戲而已

可以,前提把前乙個sql轉換成臨時表,否則你的查詢變的不倫不類。

哪位大大能幫忙優化一下sql查詢啊..急求

6樓:匿名使用者

這種優化一般要看資料庫中rpt表上有沒有建索引,增加索引可以明顯加快查詢速度。

如果不能建索引,試試改變where子句裡的順序,如:

select * from rpt

where 1=1

and (print='' or print='0' or print=null)

and name<>'公司內部'

and quantity>0

and (date between ## and ##

order by fno desc

7樓:星知魂

select * from rpt where print='' and (date

between ## and ##) and name<>'公司內部'

and quantity>0

unionselect * from rpt where print='0' and (date

between ## and ##) and name<>'公司內部'

and quantity>0

unionselect * from rpt where print=null and (date

between ## and ##) and name<>'公司內部'

and quantity>0

order by fno desc

因為用了or 的話會導致資料庫全表掃瞄,所以可以用union代替or

如果這個表非常大的時候這樣優化有效果,但資料量一般的話可能效率會更低。

print 和 date 要建立索引,如果這樣都不行的話就不用考慮sql的優化了,考慮其它的方法吧如:資料庫分割槽或公升級硬體吧。

8樓:格雷大橙子

我有一點小建議 把 print 的預設值設成0 可以把你這幾個or 去掉,儘量的不去判斷 空。這樣最起碼會好一點;

可以考慮在 where 及 order by 涉及的列上建立索引;*把*替換成你要查詢出的欄位。

9樓:網友

你應該說明下,你資料的量級,每個條件大概的選擇率,還有用的什麼dbms

直觀上看,你的選擇條件print='' or print='0' or print=null,是選擇率最低的。

個人覺得,可以嘗試在print上建索引,然後把選擇率最低的選擇推到最底。類似於這樣。

create index on print;

select *

from(select * from rpt where (print='' or print='0' or print=null)

wheredate

between ## and ##) and name<>'公司內部'

and quantity>0 order by fno desc

如果,選擇率足夠低,效果會比較好。

10樓:網友

print,date,name,quantity,fno加索引,儘量不要把這幾個欄位設計成可null型別。

select *把*替換成你要查詢出的欄位,哪怕是查詢出所有欄位也不要用*。

這樣都不行,就應該考慮換機器了。

連線查詢sql優化

11樓:

如果id上有索引還是內連效率高些。

select ,,teacher_name from student t1 inner join teacher t2 on (;

或select ,,teacher_id, teacher_name from student t1,teacher t2 where ;

sql 結合查詢優化

12樓:網友

兩個都不不是最優,效率都差不多。

tryselect *

from (select * from a where x = '1') t1

inner join (select * from b where x = '1') t2

on =

sql 怎麼優化查詢的時間?

13樓:網友

將每個欄位都加上索引。

14樓:

建立索引啊,按id建立預設索引。

sql查詢優化,高分求助

15樓:網友

呵呵,六十萬資料,從條目上來講不多。你說查詢慢,還有超時現象,可以判斷語句應該不是最主要的因素。每個欄位有索引仍然這樣,那就肯定不是索引的問題了。

大部分是你資料庫表的設計不合理,比如某些列看似可以放在乙個表裡面,但會嚴重影響查詢速度,最好將這些欄位單獨放在另乙個表。

還有你的主鍵設定是否合理。

列型別設定是否達到最小,這個可能會忽略,查一下。能char就不用varchar,等等。。。

還有乙個也許會忽略的原因:你訪問的資料庫不在本地,網路是否有考慮?

16樓:

因為沒有具體的環境,我只能根據你具體的問題回答and 條件2 and(a=i or b=i or c=i)這確實會很 影響效能。

建議改成union,即a=i的結果集union b=i的結果集 union c=i的結果集。

17樓:網友

首先說60w資料不算多,只能算中小資料量。

查詢效率的問題,可能跟你查詢指令碼有關,也有可能跟網路硬體條件有關。

如果你確定是查詢指令碼的問題,那就把解決方案貼出來看看,別人才好提建議。

18樓:網友

把篩選範圍大的條件寫前面, 越小的寫後面,而且, 索引太細反而影響速度。

60w會超時, 不太可能啊~ 應該是查詢語句裡面的or 引起的。

19樓:網友

把表結構和查詢語句寫上呀。

不然沒法做呀。

20樓:網友

很有可能是硬體的問題!如果你這個查詢返回的資料有幾十w行的話,那就是磁碟和網路的問題了!

21樓:勇敢的風

你的問題應該是查詢的sql的問題,優化不是一兩句能說清楚的。

我寫的分頁類,100w以內不會超過1秒,有什麼不清楚的請補充說明。

22樓:網友

把or操作換成union,應該能夠快一些。

可以參考《資料庫系統效能調優》機械工業 dannis shasha 孟曉峰譯。

23樓:厙曼冬

把最精確的過濾條件往最後放!60w不算多了,再查查其他原因!

24樓:網友

寫出表結構、查詢語句,每個查詢的欄位有索引沒有用,而是要過濾的條件有用到索引,可以看看執行計劃。

sql 多表查詢優化

25樓:網友

不知道你用的是什麼資料庫,如果是mssql或者oracle的話,你可以先在資料庫裡面建乙個儲存過程,表與表之間連線,最好用join相關的語句,然後在程式裡面有條件得呼叫。

當然,你得注意你的索引,看看是不是在關鍵查詢欄位上建立了索引。

26樓:網友

看得有點累,寫個儲存過程吧,access裡也可以寫個檢視,然後加引數即可的。

27樓:如此放肆的美館

能直接截語句嗎,看著這麼多標點符號,暈得很。

sql菜鳥求助

如果你說的這兩個表資料結構相同的話,執行這個命令就可以了 insert into base2.dbo.table2 select from base1.dbo.table1 是sql server嗎,兩個db是不是在同一臺機器上,如果是就直接執行 insert into base2.table2se...

sql優化具體指的是什麼

定位有問題的語bai句,du檢查執行計劃 檢查執行過程中zhi優化器的統計信dao息,分析相內關表的記錄數 容索引情況改寫sql語句 使用hint 調整索引 表分析有些sql語句不具備優化的可能,需要優化處理方式達到最佳執行計劃。但是最佳的執行計劃不一定是最佳的執 況。一切以實際執行的情況為準。sq...

如何優化用sql語句insert

插入書寫方式 1 insert into t1 field1,field2 value 001 002 最好的做法明確插入的每一列,列於查錯,而且漏列的機率會降低。2 insert into t1 field1,field2 values 001 002 003 004 能夠批量插入資料最好批量插入...