mysql - varchar 或 text - mysql 性能

标签 mysql performance text varchar

如果我们有这样的表:

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/

相关文章:

php - 构造大量插入语句或构造多个插入语句是否更有效?

mysql - SELECT ... FOR UPDATE from one table in multiple threads

java - 如何衡量多线程应用程序中的代码性能?

javascript - 如何从 "display:none;"css 获取文本值?

java - 使用 Java 从文本文件中按列提取数据

php - 如何将动态数据从 mysql 拉到 anguarJS 然后谷歌地图标记

MySQL - 如何按值分组并显示在同一行的不同列中

CUDA 程序在 Tesla K20 上运行速度比 GTX 965 慢

java - 从多个表中嵌套选择的性能

string - 在 echo 中转义特殊字符