2011-03-14 61 views
1

在有超過1萬個條目的數據庫,偶爾我們需要找到一個有以數字開頭的一列name所有行。什麼是最有效的MySQL查詢來查找以數字開頭的所有條目?

這是目前正在使用的,但它只是看起來有可能是在做這個更有效的方式。

SELECT * FROM mytable WHERE name LIKE '0%' OR name LIKE '1%' OR name ...

等等

有什麼建議?

+0

如果你的服務器不是在嚴格模式下,你可能*可能*做一些聰明的事情來轉換成整數:'1ABCDEF'應該變成'1'。只是一個稍縱即逝的想法 – 2011-03-14 00:07:51

回答

6

SELECT * FROM表,其中your_field正則表達式 '^ [0-9]'

+3

這加上名稱屬性的索引。 – 2011-03-14 00:29:08

0

我想...

SELECT * FROM myTable WHERE IF(LEFT(name, 1) = '#', 1,0) 
3

嘿, 你應該爲1的長度添加索引到數據庫中的字段。查詢將顯着更快。

ALTER TABLE `database`.`table` ADD INDEX `indexName` (`column` (1)) 

菲利克斯

1

我的猜測是,在表的索引沒有被有效地使用(如果有的話) 由於這是某種類型的炭字段,並且如果這是主查詢在這個表上,你可以調整你的索引(和我的MySQL的知識在這裏有點短,有人幫助了),使得該表由該字段排序(在MS SQL聚集索引),因此你可以這樣說

select * from mytable where name < char(57) and name > char(47) 

做一些測試,在那裏,我沒有t關於mysql如何排列這些角色的細節100%,但這應該讓你去。

另一種選擇是有一個新的欄位,讓你的「starts_with_number」真/假。您可以設置一個觸發器來填充該列。這可能會給出最好的和最可預測的結果。

0

如果您實際上並沒有在返回的行中使用每個字段,並且您確實想要從該查詢中抽出每一滴效率,那麼請不要使用select *,而應僅指定字段想要處理。

相關問題