这两个指标有什么区别?我指的是两列下的“主要”及其他方式为之间的差..MySQL索引定义,有什么区别?
1
A
回答
3
第一指该组合user_id, wallet_type
是唯一的,所述第二只定义visitid
是唯一的。
0
第一个被称为多列,复合或复合键。在这种情况下,主键约束是两列的组合,按列出的顺序(user_id,然后是wallet_type)。合并的两列必须对每一行都是唯一的。
所以,下面的数据是好的:
user_id(pk) wallet_type(pk)
-------------------------
1 1
1 2
2 2
注意行可以有重复的user_id的或wallet_type的,但不能同时:
user_id(pk) wallet_type(pk)
-------------------------
1 1
1 2
2 2
1 1 // Duplicate key
第二个例子只是一个普通的单柱键,其中visitid列中的正确值必须是唯一的:
visitid(pk) session
-------------------------
1 1
1 2 // Duplicate key
There对此有很多影响。
多列主键较大,因此它使用更多的存储空间,并且MySQL要遍历的速度稍慢。
此外,对于InnoDB,由于主键是聚簇索引,因此插入会受到负面影响,这意味着它们按物理顺序存储。更大的索引需要更长的时间更新。但是,追加行到最后还是可以的。
有一些好处,例如可以使用多列索引作为covering索引。
例如,以下查询将与所述多列主键优化:
SELECT user_id, wallet_type FROM table1 WHERE user_id = 1
SELECT user_id, wallet_type FROM table1 WHERE user_id = 1 AND wallet_type = 2
SELECT user_id, wallet_type FROM table1 ORDER BY user_id, wallet_type
SELECT user_id, wallet_type FROM table1 WHERE user_id = 1 ORDER BY wallet_type
SELECT user_id, wallet_type FROM table1 WHERE user_id > 1 AND wallet_type > 2
SELECT user_id, wallet_type FROM table1 ORDER BY user_id, wallet_type
然而,由于列左前缀,这个查询就不会被优化:
SELECT user_id, wallet_type FROM table1 WHERE wallet_type = 2
这是因为user_id未在WHERE子句中引用,但user_id是密钥中的第一列。你不能跳过一列。
相关问题
- 1. 散列和索引有什么区别?
- 2. 索引和分片有什么区别
- 3. MySQL索引:索引2个字段的方式有什么区别?
- 4. 部分索引和稀疏索引mongodb有什么区别?
- 5. 存在和定义有什么区别?
- 6. 这两个定义有什么区别?
- 7. 类型定义和类型引用有什么区别?
- 8. 分别对2列进行索引和每列的索引有什么区别?
- 9. 一起或分别声明索引,有什么区别?
- 10. 这个MySQL查询中的索引定义有什么问题?
- 11. 表索引和视图索引之间的区别是什么?
- 12. 定义mysql索引
- 13. MySQL - GROUP BY和DISTINCT有什么区别?
- 14. MySql中utf8_general_ci和utf8_unicode_ci有什么区别?
- 15. =和在mysql中有什么区别?
- 16. mysql中datadir和innodb_data_home_dir有什么区别?
- 17. MySQL中boolean和bool有什么区别?
- 18. MySQL,MySQLi和PDO有什么区别?
- 19. apache derby vs mysql有什么区别
- 20. mysqlimport和mysql有什么区别<dbfile.sql
- 21. MySQL中两个DDL有什么区别?
- 22. 对象和引用有什么区别?
- 23. __weak和__block引用有什么区别?
- 24. 指定json的键有没有引号有什么区别?
- 25. 复合主索引与两个主索引之间有什么区别?
- 26. 索引扫描,表扫描和索引查找有什么区别?
- 27. 所有mysql引擎的主要区别是什么?
- 28. 有什么区别
- 29. 有什么区别
- 30. 有什么区别?