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 能夠批量插入資料最好批量插入...