如果我们有这样的表:
create table x(
id int primary key,
something_else_1 int,
something_else_2 int,
something_else_3 int,
char_data text, -- or varchar(1000)
);
该表将针对除 char_data 之外的所有字段进行查询。
大多数查询将类似于:
select id, something_else_1
from x
where something_else_2 = 2 and something_else_3 = 5;
问题是——如果我们有索引等,
哪种配置更好 - text 还是 varchar。
最后一点——
我知道我可以将它分成两个表,在这种情况下购买分离并不是最好的主意,因为除了 blob 之外的所有字段都将是唯一索引或类似的东西。
最佳答案
this table will be queried on all fields except
char_data
.
那么char_data
的数据类型对性能没有影响。仅当您选择 char_data
时,它才会消耗更多带宽。没有别的。
这不是问题。因为你没有在你的sql中使用。 SELECT *
会变慢,但 SELECT id, something_else_1
不会变慢。 WHERE id=2 and something_else_2=1
没有效果,但是 WHERE char_data like '%charsequence%'
。 只要您不使用char_data
搜索您的表,您就是安全的。
此外,如果您仍想通过 char_data
进行搜索,则应启用全文搜索。
ALTER TABLE `x` ADD FULLTEXT(`char_data`);
注意:全文搜索仅在 MyISAM 表引擎中受支持。
关于mysql - varchar 或 text - mysql 性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9016105/