sqlin查詢優化
① oracle中運行sql查詢,where條件in()中的欄位會不會出發索引
這個要看oracle優化器自己選擇是否要使用INDEX了。這個要取決於你表name列的數據唯一性和分布。分以下2種情況。
1.name的唯一性較差:
('name1','name2','name3','name4','name5')條件訪問的數據佔全表數據的百分比很大,索引訪問的總成本大於全表掃描的成本。這時優化器就會選擇全表掃描,也就是說不會使index了。
2.name的唯一性較強
('name1','name2','name3','name4','name5')條件訪問的數據佔全表數據的百分比很小,這時優化器就會選擇使用INDEX了,因此比沒有INDEX時性能要高。
注意:ORACLE優化器了解表數據分布靠的是統計信息,因此統計信息的准確是十分重要的,否則也會產生錯誤的選擇,導致性能下降。
② sql查詢數據,查詢全部速度很快,改成not in查詢未銷售就很慢,怎樣優化謝謝!
in 和not in 速度都會慢。改成not exists()去寫 會快一些。 上面有一個in 可以改成用exists 去寫。
③ sql語句性能如何優化
如何加快查詢速度?
1、升級硬體
2、根據查詢條件,建立索引,優化索引、優化訪問方式,限制結果集的數據量。
3、擴大伺服器的內存
4、增加伺服器CPU個數
5、對於大的資料庫不要設置資料庫自動增長,它會降低伺服器的性能
6、在查詢Select語句中用Where字句限制返回的行數,避免表掃描,如果返回不必要的數據,浪費了伺服器的I/O資源,加重了網路的負擔降低性能。如果表很大,在表掃描的期間將表鎖住,禁止其他的聯接訪問表,後果嚴重。
7、查詢時不要返回不需要的行、列
8、用select top 100 / 10 Percent 來限制用戶返回的行數或者SET ROWCOUNT來限制操作的行
9、在IN後面值的列表中,將出現最頻繁的值放在最前面,出現得最少的放在最後面,減少判斷的次數
10、一般在GROUP BY 個HAVING字句之前就能剔除多餘的行,所以盡量不要用它們來做剔除行的工作。他們的執行順序應該如下最優:
select的Where字句選擇所有合適的行,Group By用來分組個統計行,Having字句用來剔除多餘的分組。這樣Group By 個Having的開銷小,查詢快.對於大的數據行進行分組和Having十分消耗資源。如果Group BY的目的不包括計算,只是分組,那麼用Distinct更快
11、一次更新多條記錄比分多次更新每次一條快,就是說批處理好
④ 求優化一句sql語句,not in速度太慢了
有倆種方法可以提高查詢效率, 1、 用not exists 代替 not in , 這種發法沒有改變查詢數據的形式,所以可能效果不明顯。 2、 利用索引查詢, select tbl1.id from table1 tbl1 left join table2 tbl2 on tbl1.id = tbl2.id where tbl2.id = null; 這個是把table2表過濾,查詢直接找索引。
⑤ sql語句中條件查詢里in、like、及=三個的效率怎麼樣
1、如果條件欄位都是非索引欄位,那麼效率都差不多,就看結果大小。
2、有差別的在於條件欄位是索引欄位時:
=在所以的情況下都會進行索引掃描,所以效率總是高的。
like 當模糊查詢為右模糊,比如'abc%'時,掃描索引,高效。
當模糊查詢含左模糊時,比如'%abc',進行全表掃描,低效。
in的作用等同於or ,也是進行索引掃描,高效。
另外,in還可以連接查詢結果集,這時往往會和exists做比較。
a、 select * from t1 where f1 in (select f1 from t2 where t2.fx='x'),
其中子查詢的where里的條件不受外層查詢的影響,這類查詢一般情況下,自動優化會轉成exist語句,也就是效率和exist一樣。
b、 select * from t1 where f1 in (select f1 from t2 where t2.fx=t1.fx),
其中子查詢的where里的條件受外層查詢的影響,這類查詢的效率要看相關條件涉及的欄位的索引情況和數據量多少,一般效率不如exists,數據量大時,效果就更加明顯。