Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
性能:mysql和joins_Mysql_Join_Performance - Fatal编程技术网

性能:mysql和joins

性能:mysql和joins,mysql,join,performance,Mysql,Join,Performance,这只是一个关于表格建模的问题 我有一个用户表,如: 用户名varchar PRIMARY 密码varchar 名字叫瓦查尔 姓瓦查尔 还有一些表,这些表引用了用户,比如组表和日志表 我现在正在考虑将一个id作为自动确认无符号整数添加到用户表中。因为有人告诉我,整数上的连接比varchar上的连接更快 对我来说,这听起来很合理,因为需要比较的字节更少 这是真的吗?或者您会说,不需要向用户表引入id列 非常感谢:)MySQL在使用varchar索引时,特别是InnoDB时,速度会非常慢,具体取

这只是一个关于表格建模的问题

我有一个用户表,如:

  • 用户名varchar PRIMARY
  • 密码varchar
  • 名字叫瓦查尔
  • 姓瓦查尔
还有一些表,这些表引用了用户,比如组表和日志表

我现在正在考虑将一个id作为自动确认无符号整数添加到用户表中。因为有人告诉我,整数上的连接比varchar上的连接更快

对我来说,这听起来很合理,因为需要比较的字节更少

这是真的吗?或者您会说,不需要向用户表引入id列


非常感谢:)

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讨论,下面是一篇您可能感兴趣的文章

相关