性能:mysql和joins
这只是一个关于表格建模的问题 我有一个用户表,如:性能:mysql和joins,mysql,join,performance,Mysql,Join,Performance,这只是一个关于表格建模的问题 我有一个用户表,如: 用户名varchar PRIMARY 密码varchar 名字叫瓦查尔 姓瓦查尔 还有一些表,这些表引用了用户,比如组表和日志表 我现在正在考虑将一个id作为自动确认无符号整数添加到用户表中。因为有人告诉我,整数上的连接比varchar上的连接更快 对我来说,这听起来很合理,因为需要比较的字节更少 这是真的吗?或者您会说,不需要向用户表引入id列 非常感谢:)MySQL在使用varchar索引时,特别是InnoDB时,速度会非常慢,具体取
- 用户名varchar PRIMARY
- 密码varchar
- 名字叫瓦查尔
- 姓瓦查尔
非常感谢:)MySQL在使用varchar索引时,特别是InnoDB时,速度会非常慢,具体取决于您使用的引擎。MyISAM将非常快,但它不符合ACID,所以您应该放弃它 这通常适用于所有DBMS,整数总是比字符串快(使用Artithmetricalüber fast CPU操作进行比较,而不是将字符串逐字符进行比较) 在SQL中继续执行连接选择时,请始终对索引字段执行该操作,不管是否有整数,这可能是这里给您的最重要建议
编辑:实际上,大多数DBMS都会优化varchar索引以进行读取,InnoDB使用BTREEs和哈希字符串,这使得读取操作非常快速。InnoDB仍然受到varchar索引写入速度慢的困扰,我找不到相关的bug,但它们仍然作为开放式MySQL bug存在于MySQL官方bug跟踪器中。在计划使用InnoDB时,请始终取消varchar索引。MySQL在使用varchar索引时,特别是InnoDB时,速度可能会非常慢,具体取决于您使用的引擎。MyISAM将非常快,但它不符合ACID,所以您应该放弃它 这通常适用于所有DBMS,整数总是比字符串快(使用Artithmetricalüber fast CPU操作进行比较,而不是将字符串逐字符进行比较) 在SQL中继续执行连接选择时,请始终对索引字段执行该操作,不管是否有整数,这可能是这里给您的最重要建议
编辑:实际上,大多数DBMS都会优化varchar索引以进行读取,InnoDB使用BTREEs和哈希字符串,这使得读取操作非常快速。InnoDB仍然受到varchar索引写入速度慢的困扰,我找不到相关的bug,但它们仍然作为开放式MySQL bug存在于MySQL官方bug跟踪器中。在计划使用InnoDB时,请始终将varchar索引作废。从技术上讲,由于您编写的原因,整数应该只快一点。 然而,在您的案例中,真正的区别在于您可以选择使用自然键还是合成键 如果您有一个稳定(意味着它永远不会有机会)的自然密钥,您将获得一个显著的性能优势。您通常可以完全删除“连接到用户”表,因为您可以直接查询其他表,如:
select ...
from user_posts
where userid = 'JMW'
关于INT/VARCHAR讨论,下面是一篇您可能感兴趣的文章
从技术上讲,由于您所写的原因,整数应该只快一点。 然而,在您的案例中,真正的区别在于您可以选择使用自然键还是合成键 如果您有一个稳定(意味着它永远不会有机会)的自然密钥,您将获得一个显著的性能优势。您通常可以完全删除“连接到用户”表,因为您可以直接查询其他表,如:
select ...
from user_posts
where userid = 'JMW'
关于INT/VARCHAR讨论,下面是一篇您可能感兴趣的文章
相关