2011-10-03 35 views
2

請解釋一下,在下面的查詢中,哪一個在Mysql中會更快?爲名稱字段在BINARY或沒有Binary的情況下,哪一個會更快?

SELECT * FROM `userstatus` where BINARY Name = 'Raja' 

[OR] 

SELECT * FROM `userstatus` where Name = 'raja' 

Db的條目是「拉賈」

我有10000條記錄在我的數據庫,我試圖與「解釋」的查詢,但都稱執行時間相同。

+1

如果您的排序規則不區分大小寫,並且** Name **被索引,那麼第二個查詢應該運行得更快,否則應該沒有太大的區別。 – Karolis

+0

一般來說,我沒有索引我的表中的任何字段,並且在mytable中有超過1000000個,那麼這將是更快的! – Raja

+0

嗯... BINARY不依賴整理,所以如果沒有索引,這可以運行得更快。在任何情況下,我認爲最好的方法是嘗試:) – Karolis

回答

2

你的問題沒有意義。

行的排序決定了索引的佈局以及測試是否區分大小寫。
如果您投了一排,劇組需要時間。

所以邏輯上uncasted操作要快....

但是,如果中投使得它找到更少的行比鑄造操作會更快或其他方式輪。
這當然會改變整個問題並使比較無效。

轉換爲BINARY會使比較區分大小寫,改變測試的性質以及非常可能的命中數。

我的建議
再也不用擔心排序規則的速度,百分比是如此之小,這是從來沒有值得理會。
使用select *(一個很大的否定)的速度懲罰將遠遠超過整理問題。
從放入索引開始。這是10,000倍加速的因素,有一百萬行。

2

假設Names字段是簡單的latin-1文本類型,並且沒有索引,那麼查詢的BINARY版本會更快。默認情況下,MySQL會進行不區分大小寫的比較,這意味着字段值和您正在比較的值將被搗毀成單個案例(全部上限或全部下限),然後進行比較。執行二進制比較將跳過大小寫轉換,並對每個字符值進行1:1的原始數字比較,使其成爲區分大小寫的比較結果。

當然,這只是一個非常具體的情況,在您的情況下不太可能滿足。太多的其他因素會影響到這一點,尤其是索引的存在。