【问题标题】:performance: mysql and joins性能:mysql和joins
【发布时间】:2010-12-26 10:56:51
【问题描述】:
这只是一个关于表格建模的问题。
我有一个像这样的用户表:
- 用户名 varchar PRIMARY
- 密码变量
- 名字 varchar
- 姓氏varchar
- ...
然后有一些表,引用用户,如组和日志表...
我现在正在考虑将 id 作为 autoincerment unsigned integer 添加到用户表中。因为有人告诉我,整数连接比 varchars 连接更快。
对我来说这听起来很合理,因为需要比较的字节更少。
这是真的吗?或者你会说,没有必要在用户表中引入 id 列?
提前非常感谢:)
【问题讨论】:
标签:
mysql
join
performance
【解决方案2】:
根据您使用的引擎,MySQL 在使用 varchar 索引时可能会非常慢,尤其是 InnoDB。 MyISAM 会很快,但它不符合 ACID,所以你应该放弃它。
这对于所有 DBMS 来说都是如此,整数总是比字符串快(您可以使用人工计算的超快速 CPU 操作来比较它,而不是比较字符串 char 和 char)。
当您在 SQL 中进行 JOIN select 时,始终在索引字段上执行此操作,无论是否有整数,这可能是对您最重要的建议。
编辑:实际上,大多数 DBMS 会优化 varchar 索引以进行读取,InnoDB 使用 BTREE 和散列字符串,这使得它在读取操作中非常快。 InnoDB 仍然存在 varchar 索引写入缓慢的问题,我找不到相关的错误,但它们仍然作为开放的 MySQL 错误存在于 MySQL 官方错误跟踪器中。计划使用 InnoDB 时,总是 void varchar 索引。