我在我的表上執行的查詢速度很慢。它有一個where子句如:MySQL MyISAM索引文本列
where supplier= 'Microsoft'
列類型是文本。在phpmyadmin中,我查看是否可以向表中添加索引,但該選項已禁用。這是否意味着你不能索引文本列?這是否意味着像這樣的每個更新查詢都在執行全表掃描?
那麼最好的辦法是將列分離到它自己的表中,並在當前表中放置一個ID然後放置一個索引?這可能會加快查詢速度嗎?
我在我的表上執行的查詢速度很慢。它有一個where子句如:MySQL MyISAM索引文本列
where supplier= 'Microsoft'
列類型是文本。在phpmyadmin中,我查看是否可以向表中添加索引,但該選項已禁用。這是否意味着你不能索引文本列?這是否意味着像這樣的每個更新查詢都在執行全表掃描?
那麼最好的辦法是將列分離到它自己的表中,並在當前表中放置一個ID然後放置一個索引?這可能會加快查詢速度嗎?
您需要爲索引添加前綴長度。看看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
但是,也許你應該重新考慮供應商的數據類型?從名字上看,這聽起來不像一個典型的文本字段......
你應該做
select max(length(supplier)) from the_table;
檢查如果長度小於255,你可以(而且你應該)將其轉換爲varchar(255)並在其上構建索引
選擇正確的數據類型更重要。
如果長度很長,建立一個限制長度的索引將有所幫助。
這將返回給我14.在「一般」中,varchar列的執行效果是否優於文本列(即使文本列被編入索引?)。 – Sally 2011-01-07 10:46:54
我理解你的意思嗎?這是一個TEXT專欄?如在BLOB對應的類型中那樣?我可以建議考慮一個VARCHAR這一列嗎?
您在SE上的使用情況非常特別:票數偏低但數量龐大。乾杯。 – 2013-01-07 01:51:54