2011-01-07 64 views
1

我在我的表上執行的查詢速度很慢。它有一個where子句如:MySQL MyISAM索引文本列

where supplier= 'Microsoft' 

列類型是文本。在phpmyadmin中,我查看是否可以向表中添加索引,但該選項已禁用。這是否意味着你不能索引文本列?這是否意味着像這樣的每個更新查詢都在執行全表掃描?

那麼最好的辦法是將列分離到它自己的表中,並在當前表中放置一個ID然後放置一個索引?這可能會加快查詢速度嗎?

+0

您在SE上的使用情況非常特別:票數偏低但數量龐大。乾杯。 – 2013-01-07 01:51:54

回答

0

您需要爲索引添加前綴長度。看看Column Indexes docs

下面創建的第一個50個字節的供應商領域的指標:

mysql> create index supplier_ix on t(supplier(50)); 
Query OK, 0 rows affected (0.03 sec) 
Records: 0 Duplicates: 0 Warnings: 0 

但是,也許你應該重新考慮供應商的數據類型?從名字上看,這聽起來不像一個典型的文本字段......

+0

這會阻止發生全表掃描嗎? – Sally 2011-01-07 10:48:29

+0

如果我說是,你是否仍然會重新考慮你選擇的數據類型? :) – Ronnis 2011-01-07 11:16:08

0

你應該做

select max(length(supplier)) from the_table; 

檢查如果長度小於255,你可以(而且你應該)將其轉換爲varchar(255)並在其上構建索引

選擇正確的數據類型更重要。

如果長度很長,建立一個限制長度的索引將有所幫助。

+0

這將返回給我14.在「一般」中,varchar列的執行效果是否優於文本列(即使文本列被編入索引?)。 – Sally 2011-01-07 10:46:54

0

我理解你的意思嗎?這是一個TEXT專欄?如在BLOB對應的類型中那樣?我可以建議考慮一個VARCHAR這一列嗎?