您需要显式地创建索引,还是在定义主键时隐式创建索引?MyISAM和InnoDB的答案一样吗?
当前回答
尽管这在2009年被问到,但我认为我应该发布一个关于主键的MySQL文档的实际引用。 http://dev.mysql.com/doc/refman/5.5/en/optimizing-primary-keys.html
表的主键表示列或列集 用在最重要的问题上。它有一个相关的索引, 快速查询性能
MySQL 5.0参考参考:http://dev.mysql.com/doc/refman/5.0/en/mysql-indexes.html
大多数MySQL索引(PRIMARY KEY, UNIQUE, INDEX和FULLTEXT)都是 存储在b树中。例外情况是空间数据类型上的索引 使用r -树,内存表也支持散列索引。
其他回答
根据http://dev.mysql.com/doc/refman/5.0/en/constraint-primary-key.html的说法,这似乎是隐含的
尽管这在2009年被问到,但我认为我应该发布一个关于主键的MySQL文档的实际引用。 http://dev.mysql.com/doc/refman/5.5/en/optimizing-primary-keys.html
表的主键表示列或列集 用在最重要的问题上。它有一个相关的索引, 快速查询性能
MySQL 5.0参考参考:http://dev.mysql.com/doc/refman/5.0/en/mysql-indexes.html
大多数MySQL索引(PRIMARY KEY, UNIQUE, INDEX和FULLTEXT)都是 存储在b树中。例外情况是空间数据类型上的索引 使用r -树,内存表也支持散列索引。
主键总是被索引。对于MyISAM和InnoDB也是如此,对于所有支持索引的存储引擎也是如此。
是的,我们可以把主键列看作是任何其他索引列,只是带有主键的约束。
在大多数情况下,我们既需要主键,也需要索引表中的列/列,因为我们对表的查询可能会基于非主键的列/列来过滤行,在这种情况下,我们通常也会索引那些列/列。
MyISAM和InnoDB的主键都隐式索引。可以通过对使用主键的查询使用EXPLAIN来验证这一点。
推荐文章
- 我如何得到“id”后插入到MySQL数据库与Python?
- 什么是ORM,它是如何工作的,我应该如何使用它?
- MySQL工作台:如何保持连接活动
- 'create_date'时间戳字段的默认值无效
- 为现有数据库生成ERD
- BASE术语解释
- 在表变量上创建索引
- 我可以从一个完整的mysql mysqldump文件恢复一个表吗?
- 如何使用jq从JSON获得键名
- 计数在VARCHAR字段中字符串的出现次数?
- 非加密用途的最快哈希?
- 如何在Python中直接获得字典键作为变量(而不是通过从值搜索)?
- 修改一个MySQL列为AUTO_INCREMENT
- 查询以列出数据库中每个表中的记录数量
- 如何删除数组元素,然后重新索引数组?