2011-01-07 61 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这一列吗?