2016-06-09 31 views
0

我正在使用MySQL數據庫,但是這個問題可能適用於SQL,Oracle等。查詢時使用相等還是不相等更好?

我有一個產品表,其中一列是品牌,我給了用戶選擇的可能性他想要的品牌。我的問題是,查詢選擇匹配所選品牌的所有結果還是選擇與未選中品牌不匹配的表中的所有結果進行查詢會更好?

因此,

是更有效/快(或相同),以尋找結果等於或東西不 平等?以及爲什麼...

+0

您是否嘗試過運行任何測試來確定計時? – csmckelvey

+0

可能重複:http://stackoverflow.com/questions/7419251/sql-server-operator-is-very-slow-compared-to-on-table-with-a-few-millio。由於更好地使用索引,我的理解總是等於有更好的表現,而不是不平等。但是,通常在1秒鐘> 15分鐘以上的時間內,您通常不會看到該人遇到的問題。 – Dresden

+0

是的,我剛剛看到這個問題,它似乎不正常,它可以幫助雖然 – davidivad

回答

1

性能是一個理由使用=。這有兩個組件。首先是索引,其中=比較提供更強大的索引功能。第二個是分區。雖然不太可能在只有少數值的列上,但是=更適合解析分區。

另一個原因是語義。 NULL的存在可能會令人困惑。考慮兩個比較:

where col = 'x' 
where col <> 'x' 

這些where條款的兩個過濾出值,其中colNULL。這對於=總是有意義的。然而,即使在你知道規則後,它仍然與<>有點混淆。直覺上,我們認爲「NULL不等於」x「,所以它應該是真的」。實際上,NULL表示未知值,並且未知值可能等於'x',因此語句可能爲爲真;實際上,它會返回被過濾掉的NULL

0

從性能的角度來看,您希望使用equals來使用索引。

從邏輯上來看這將是危險的使用「不等於」。在這種情況下,您可以刪除意外的數據。 1.檢索的品牌 2.列表出現在列表中的用戶 3.另一種操作插入一個新的品牌X 4.用戶選擇哪些品牌,以保持並按下刪除。 5.品牌x已被無意中刪除。

相關問題