當前位置:首頁 » 編程語言 » sqlor和in

sqlor和in

發布時間: 2022-12-16 02:50:47

sql中 in的語句好慢,有什麼好方法可取代

1、對於索引列來最好使用union all,因復雜的查詢【包含運算等】將使or、in放棄索引而全表掃描,除非你能確定or、in會使用索引。
2、對於只有非索引欄位來說你就老老實實的用or 或者in,因為 非索引欄位本來要全表掃描而union all 只成倍增加表掃描的次數。
3、對於及有索引欄位【索引欄位有效】又包含非索引欄位來時,按理你也使用or 、in或者union all 都可以,但是我推薦使用or、in。

Ⅱ SQL語句中 in和or的區別

SQL語句中 in和or的區別為:操作不同、適合不同、執行效率不同。

一、操作不同

1、in:in是把父查詢表和子查詢表作hash連接。

2、or:or是對父查詢表作loop循環,每次loop循環再對子查詢表進行查詢。

二、適合不同

1、in:in適合用於子查詢表數據比父查詢表數據多的情況。

2、or:or適合用於子查詢表數據比父查詢表數據少的情況。

三、執行效率不同

1、in:在沒有索引的情況下,隨著in後面的數據量越多,in的執行效率不會有太大的下降。

2、or:在沒有索引的情況下,隨著or後面的數據量越多,or的執行效率會有明顯的下降。

Ⅲ 在sql語句中 為什麼where 欄位=『』or 欄位=『』與where 欄位in(『』,『』)查詢結果不同

sqlserver里and的優先順序是大於or的,可以用括弧來改變順序,所以第一種寫法改成這樣 (倉庫號='AB0002' or 倉庫號='AB0003') and 工資<5000

Ⅳ 求優化sql,or in 速度太慢了,就查出來一條數據10秒 ,急求。。

--你的SQL有問題吧?C.ResourceNTAccount='user1'or'user1'in應該改成C.ResourceNTAccount='user1'orC.ResourceNTAccountin

建議:子查詢SELECT
distinctB.ResourceNTAccount
FROM[ZhongJian].[dbo].[View_User_Group]A
leftjoinProjectServer_Reporting.dbo.MSP_EpmResource_UserViewBon
A.UserAccount=B.ResourceNTAccount
whereGroupName=N'項目副經理工作組'ANDB.資源所屬項目like'%'+C.項目所屬機構+'%'
中可不可以把最大化模糊匹配改成最右匹配或者直接改造成=,
方案一:
我觀察你的SQL,首先selectdistinctC.[項目所屬機構]AsProjectName,MIN(C.TaskBaseline0StartDate)asProjectStartDat中的distinct沒有必要寫,這樣會消耗一部分時間
selectC.[項目所屬機構]AsProjectName,MIN(C.TaskBaseline0StartDate)asProjectStartDate
fromView_TaskAllInfoCwhere(C.ResourceNTAccount='user1'orC.ResourceNTAccountin(
SELECT
distinctB.ResourceNTAccount
FROM[ZhongJian].[dbo].[View_User_Group]A
leftjoinProjectServer_Reporting.dbo.MSP_EpmResource_UserViewBon
A.UserAccount=B.ResourceNTAccount
whereGroupName=N'項目副經理工作組'ANDB.資源所屬項目like'%'+C.項目所屬機構+'%'
))
groupbyC.[項目所屬機構]
--方案一:
--若效果不佳,可以把整個SQL拆分兩個部分
selectselectdistinctC.[項目所屬機構]AsProjectName,MIN(C.TaskBaseline0StartDate)asProjectStartDate
from
(
selectdistinctC.[項目所屬機構]AsProjectName,MIN(C.TaskBaseline0StartDate)asProjectStartDate
fromView_TaskAllInfoCwhereC.ResourceNTAccount='user1'
unionall
selectdistinctC.[項目所屬機構]AsProjectName,MIN(C.TaskBaseline0StartDate)asProjectStartDate
fromView_TaskAllInfoCwhereC.ResourceNTAccountin
SELECT
distinctB.ResourceNTAccount
FROM[ZhongJian].[dbo].[View_User_Group]A
leftjoinProjectServer_Reporting.dbo.MSP_EpmResource_UserViewBon
A.UserAccount=B.ResourceNTAccount
whereGroupName=N'項目副經理工作組'ANDB.資源所屬項目like'%'+C.項目所屬機構+'%'
)ast

Ⅳ SQL IN 的效率高還是 or的效率高

執行的效率是一樣的。
兩極化的plan
hash
value一模一樣,說明他們內部執行是一模一樣的

Ⅵ SQL語句中的OR,IN 關鍵字

因為 and 的優先順序比 or 大。所以樓上的就用括弧括起來了。

Ⅶ SQL中,in與or作用相當,我就弄不明白,不就是字母不同嗎咋就in牛逼點,字母這東西還不是唯心

使用場景不太一樣。
(1)or 可能是多個欄位的 或條件,例如 找一個學生 班級是一班 或者 學習會計專業的也行。
class ='1班' or major='會計'
(2)in 一般是 一個欄位多值的情況,例如 找一個學生 班級是一班 或者 二班,或者三班
class in ('1班','2班','3班')
PS:還有就是當結果非常多事你不可能都寫出來,in可以使用在別的查詢條件中,例如找一個參加了數學考試的學生信息。
select * from students where Sno in (select Sno from Exam where class='數學')

Ⅷ 操作符的SQL里的操作符

相等:相等操作符在SQL語句里比較一個值與另一個值,等號(=)表示相等。在進行相等比較時,被比較的值必須完全匹配,否則就不會返回數據。如果在相等比較過程中兩個值相等,那麼這個比較的返回值就是true,否則就是false。這個布爾值(true或false)用於決定是否返回數據。
不相等:在SQL里表示不相等的操作符是<>(一個小於號和一個大於號)。如果兩個值不相等,條件就返回true,否則就返回false。另一種表示不相等的方式是!=,而且很多主要的SQL實現採用這種方式。
小於:<
大於:>
比較操作符的組合:等號可以與小於號和大於號聯合使用。 用戶對SQL關鍵字而不是符號進行比較。
is null:這個操作符用於與null值進行比較。
between:操作符between用於尋找位於一個給定最大值和最小值之間的值,這個最大值和最小值是包含在內的。between是包含邊界值的,所以查詢結果里會包含指定的最大值和最小值。
in:操作符in用於把一個值與一個指定列表進行比較,當被比較的值至少與列表中一個值相匹配時,它會返回true。使用操作符in可以得到操作符or一樣的結果,但它的速度更快。
like:操作符like利用通配符把一個值與類似的值進行比較,通配符有兩個:百分號(%);下劃線(_)。百分號代表零個、一個或多個字元;下劃線( _ )代表一個數字或字元。
exists:這個操作符用於搜索指定表裡是否存在滿足特定條件的記錄。
all:操作符all用於把一個值與另一個集合里全部值進行比較。
any/some:操作符any用於把一個值與另一個列表裡任意值進行比較。some是any的別名,它們可以互換使用。 如果想在SQL語句里利用多個條件來縮小數據范圍,我們就需要組合多個條件。這正是連接操作符的功能。
and:操作符and讓我們可以在一條SQL語句的where子句里使用多個條件。在使用and時,無論SQL語句是事務操作還是查詢,所有由and連接的條件都必須為true,SQL語句才會實際執行。
or:操作符or可以在SQL語句的where子句中連接多個條件,這時無論SQL語句是事務操作還是查詢,只要or連接的條件里有至少一個是true,SQl語句就會執行。
注意:比較操作符和邏輯操作符都可以單獨或彼此復合使用。
提示:當SQL語句里包含多個條件和操作符時,利用圓括弧把語句按照邏輯關系進行劃分可以提高語句的可讀性。當然,不恰當地使用圓括弧也會影響輸出結果。 操作符not可以顛倒邏輯操作符的含義,它可以與其他操作符構成以下幾種形式:
not equal:不相等
not between:操作符between的求反
not in:操作符in的求反
not like:操作符like的求反
is not null:操作符is null的求反
not exists:操作符exists的求反
not unique:操作符distinct的求反 加法(+)
減法(-)
乘法(*)
除法(/)
算術操作符可以彼此組合使用,並且遵循基本算數運算中的優先順序:首先執行乘法和除法,然後是加法和減法。用戶控制算術運算次序的唯一方式是使用圓括弧,圓括弧里包含的表達式會被當作一個整體進行優先求值。

Ⅸ 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,數據量大時,效果就更加明顯。

Ⅹ sql in好還是or好,我的條件有五六個以上,但用or的話感覺太長了,不知道哪個效率高點

自己沒測試過,這兩篇文章看著比較靠譜:

網頁鏈接作者結論:如果in和or所在列有索引或者主鍵的話,or和in沒啥差別,執行計劃和執行時間都幾乎一樣。在沒有索引的情況下,隨著in或者or後面的數據量越多,in的效率不會有太大的下降,但是or會隨著記錄越多的話性能下降非常厲害

網頁鏈接作者結論:總體來說,In的效率更高一些。

熱點內容
伺服器e3與e5有什麼區別 發布:2025-01-24 06:19:35 瀏覽:122
linuxdb2建資料庫 發布:2025-01-24 06:19:09 瀏覽:665
武漢長江存儲公司有多少人 發布:2025-01-24 06:09:03 瀏覽:413
ftp伺服器輸入密碼 發布:2025-01-24 05:27:41 瀏覽:210
電信帳號怎麼改密碼 發布:2025-01-24 05:11:22 瀏覽:847
筆記本x17配置怎麼選 發布:2025-01-24 05:05:53 瀏覽:8
python如何封裝 發布:2025-01-24 05:05:46 瀏覽:844
csgo怎麼連接伺服器 發布:2025-01-24 05:05:45 瀏覽:323
408哪個配置合適 發布:2025-01-24 05:01:54 瀏覽:883
oraclesql刪除重復 發布:2025-01-24 05:01:12 瀏覽:409