我在我的表上执行的查询速度很慢。它有一个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