【问题标题】:does a primary key speed up an index?主键会加速索引吗?
【发布时间】:2012-12-19 23:35:06
【问题描述】:

除了方便的自动增量和UNIQUE 功能之外,PK 真的可以加快索引速度吗?

无论是非 PK 索引的 INT 还是 PKed(同一列,两个不同的测试),速度是否相同?如果我在同一个系统的同一张表上有相同的列,如果带有索引的UNIQUEINT 列也启用了PK,会更快吗? PK 是否让与其共存的索引更快?

如果您可以这么好,请仅提供系统统计数据的实际结果。

【问题讨论】:

  • 主键总是被索引的。

标签: mysql performance indexing benchmarking


【解决方案1】:

基表中的行由为表定义的主键值唯一标识。表的主键由一列或多列的值组成。

主键被自动索引以促进有效的信息检索。

主键索引是对表最有效的访问路径。

可以将其他列或列组合定义为二级索引,以提高数据检索的性能。二级索引是在创建表后定义的(使用 CREATE INDEX 语句)。

二级索引可能有用的一个示例是,当定期对包含许多行的表中的非键列进行搜索时,在列上定义索引可能会加快搜索速度。搜索结果不受索引影响,但搜索速度得到优化。

但是应该注意,索引会产生更新、删除和插入操作的开销,因为索引也必须更新。

索引是内部结构,一旦创建就不能被用户显式访问。如果内部查询优化过程确定索引会提高搜索效率,则将使用索引。

SQL 查询在内部准备好执行时会自动优化。优化过程确定执行每个查询的最有效方式,这可能涉及也可能不涉及使用适用的索引。

【讨论】:

    【解决方案2】:

    表的主键代表您在最重要查询中使用的列或列集。它有一个关联的索引,用于快速查询性能。查询性能受益于 NOT NULL 优化,因为它不能包含任何 NULL 值。使用 InnoDB 存储引擎,表数据在物理上被组织以进行超快速查找并根据主键列或列进行排序。

    如果您的表很大且很重要,但没有明显的列或一组列可用作主键,您可以创建一个具有自动递增值的单独列以用作主键。当您使用外键连接表时,这些唯一 ID 可以用作指向其他表中对应行的指针

    另请参考以下位置:http://www.dbasquare.com/2012/04/04/how-important-a-primary-key-can-be-for-mysql-performance/http://www.w3schools.com/sql/sql_primarykey.asp

    【讨论】:

    • 我一离开vox pop就会+1。物理订购。
    • 不,谢谢。该物理组件至关重要。你给了我很多想法。
    • 其他数据库一般都这样吗?例如Oracle 和 MSSQL
    • 是的...夏兰·加拉赫
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-27
    • 2021-09-25
    • 2014-02-22
    • 2017-04-03
    • 2012-12-30
    • 1970-01-01
    相关资源
    最近更新 更多