Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/57.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复合密钥最佳实践_Mysql_Sql_Performance_Composite Key - Fatal编程技术网

MySQL复合密钥最佳实践

MySQL复合密钥最佳实践,mysql,sql,performance,composite-key,Mysql,Sql,Performance,Composite Key,我想这是一个性能问题 在创建复合键时,顺序是否重要 在我的实例中,复合密钥是使用名为hash的128位字符和名为user_id的外部(int)密钥创建的 例如(hash,user\u id)会比(user\u id,hash)更快吗 例如,如果在联接中使用复合键,复合键会变慢吗 CREATE INDEX composite_hash_user_id_index ON `user_false_positives` (`hash`, `user_id`); 组合键中的顺序非常重要。MySQL使用最

我想这是一个性能问题

在创建复合键时,顺序是否重要

在我的实例中,复合密钥是使用名为hash的128位字符和名为user_id的外部(int)密钥创建的

例如(
hash
user\u id
)会比(
user\u id
hash
)更快吗

例如,如果在联接中使用复合键,复合键会变慢吗

CREATE INDEX composite_hash_user_id_index ON `user_false_positives` (`hash`, `user_id`);

组合键中的顺序非常重要。MySQL使用最左边的索引,因此它取决于您想要运行的查询。你可以做一个覆盖索引。在(a,b)上创建一个索引,然后在b上单独创建另一个索引。关于索引,有很多警告。阅读下面的幻灯片

最左边的索引示例:如果在(a,b)上有索引并运行

它将使用索引,但

SELECT * FROM table ORDER BY b

没有。因此,在b上单独使用另一个索引将确保在对数据排序时使用该索引。

顺序很重要;顺序应与查询中的where语句匹配,否则将不使用索引 如果在select语句中使用where子句,如“where user_id=1和hash='xxxxx'”,并且索引是hash,user_id,则不会使用该索引。 这里有更多的例子

是的。是的。但是x比y快吗?这是一个更难的问题。嗨,山姆,谢谢你的反馈。当你说“MySQL使用最左边的索引”时,你指的是复合键的左边部分。这是索引的第一部分吗?如果你的问题是关于创建索引,那么答案基本上是否定的。如果问题是关于使用索引,那么顺序很重要。我会更新答案。我说的是索引创建后的使用。Sam,如果我尝试使用此复合键插入,它会比以另一种方式进行唯一复合设置(user\u id,hash)慢吗?就写入而言,如果hash和user\u id在整个数据中具有相同的唯一性比率,则是相同的。Write重新构造索引,因此很难说。
SELECT * FROM table ORDER BY b