精华内容
下载资源
问答
  • 主键 索引

    2012-08-02 16:13:33
    主键 有主键索引 主键 唯一性索引 主键:非空唯一;唯一性索引:可空唯一 如果唯一索引涉及的每个字段都已经有非空属性差不多等同于主键

    主键 有主键索引

    主键 唯一性索引

    主键:非空唯一;唯一性索引:可空唯一

    如果唯一索引涉及的每个字段都已经有非空属性差不多等同于主键


     

    展开全文
  • 主键索引主键索引的区别是:非主键索引的叶子节点存放的是主键的值,主键索引的叶子节点存放的是整行数据。其中,非主键索引又称为二级索引,主键索引又称为聚簇索引。 根据这两种结构我们来进行下查询,看看...

    对于一张数据表,ID为主键
    在这里插入图片描述

    在这里插入图片描述
    非主键索引和主键索引的区别是:非主键索引的叶子节点存放的是主键的值,主键索引的叶子节点存放的是整行数据。其中,非主键索引又称为二级索引,主键索引又称为聚簇索引。

    根据这两种结构我们来进行下查询,看看他们在查询上有什么区别。
    1、如果查询语句是 select * from table where ID = 100,如果是主键索引则只需要搜索ID这颗B+树。
    2.如果查询语句是 select * from table where k = 1,即非主键的查询方式,要先搜索K索引树,然后再对ID索引树搜索一遍。

    参考:
    https://www.cnblogs.com/heishuichenzhou/p/10813463.html

    展开全文
  • 在MySQL里,主键索引和辅助索引分别是什么意思,有什么区别?上次的分享我们介绍了聚集索引和非聚集索引的区别,本次我们继续介绍主键索引和辅助索引的区别。1、主键索引主键索引,简称主键,原文是PRIMARY KEY,由...

    在MySQL里,主键索引和辅助索引分别是什么意思,有什么区别?

    上次的分享我们介绍了聚集索引和非聚集索引的区别,本次我们继续介绍主键索引和辅助索引的区别。

    1、主键索引

    主键索引,简称主键,原文是PRIMARY KEY,由一个或多个列组成,用于唯一性标识数据表中的某一条记录。一个表可以没有主键,但最多只能有一个主键,并且主键值不能包含NULL。

    在MySQL中,InnoDB数据表的主键设计我们通常遵循几个原则:

    1、采用一个没有业务用途的自增属性列作为主键;

    2、主键字段值总是不更新,只有新增或者删除两种操作;

    3、不选择会动态更新的类型,比如当前时间戳等。

    这么做的好处有几点:

    1、新增数据时,由于主键值是顺序增长的,innodb page发生分裂的概率降低了;可以参考以往的分享“[MySQL FAQ]系列 — 为什么InnoDB表要建议用自增列做主键”;

    2、业务数据有变更时,不修改主键值,物理存储位置发生变化的概率降低了,innodb page中产生碎片的概率也降低了。

    MyISAM表因为是堆组织表,主键类型设计方面就可以不用这么讲究了。

    2、辅助索引

    辅助索引,就是我们常规所指的索引,原文是SECONDARY KEY。辅助索引里还可以再分为唯一索引,非唯一索引。

    唯一索引其实应该叫做唯一性约束,它的作用是避免一列或多列值存在重复,是一种约束性索引。

    3、主键索引和辅助索引的区别

    在MyISAM引擎中,唯一索引除了key值允许存在NULL外,其余的和主键索引没有本质性区别。也就是说,在MyISAM引擎中,不允许存在NULL值的唯一索引,本质上和主键索引是一回事。

    而在InnoDB引擎中,主键索引和辅助索引的区别就很大了。主键索引会被选中作为聚集索引,而唯一索引和普通辅助索引间除了唯一性约束外,在存储上没本质区别。

    从查询性能上来说,在MyISAM表中主键索引和不允许有NULL的唯一索引的查询性能是相当的,在InnoDB表通过唯一索引查询则需要多一次从辅助索引到主键索引的转换过程。InnoDB表基于普通索引的查找代价更高,因为每次检索到结果后,还需要至少再多检索一次才能确认是否还有更多符合条件的结果,主键索引和唯一索引就不需要这么做了。

    经过测试,对100万行数据的MyISAM做随机检索(整数类型),主键和唯一索引的效率基本一样,普通索引的检索效率则慢了30%以上。换成InnoDB表的话,唯一索引比主键索引效率约慢9%,普通索引比主键索引约慢了50%以上。

    关于MySQL的方方面面大家想了解什么,可以直接留言回复,我会从中选择一些热门话题进行分享。 同时希望大家多多转发,多一些阅读量是老叶继续努力分享的绝佳助力,谢谢大家 :)

    展开全文
  • Mysql主键索引与非主键索引区别

    千次阅读 2020-05-05 01:18:05
    什么是索引 MySql官方索引的定义:索引(Index)是帮助MySql高效获取数据的...1.主键索引索引着数据,然而普通索引索引着主键ID值(这是在innodb中,但是如果是myisam中,主键索引和普通索引是没有区别的都是直接索...

    什么是索引

    MySql官方索引的定义:索引(Index)是帮助MySql高效获取数据的数据结构,索引的目的在于提高查询效率,类比字典;实际上索引也是一张表,该表保存了主键与索引字段,并指向实体表的记录,索引列也是要占用空间。

    主键索引和普通索引的区别

    1.主键索引索引着数据,然而普通索引索引着主键ID值(这是在innodb中,但是如果是myisam中,主键索引和普通索引是没有区别的都是直接索引着数据)
    2.当你查询用的是where id=x 时,那只需要扫描一遍主键索引,然后拿到相应数据,但是如果是查询的普通索引的话,那么会先扫描一次普通索引,拿到主键值,然后再去扫主键索引,拿到所需要的数据,这个过程叫做回表

    索引具体采用的哪种数据结构

    常见的MySQL主要有两种结构:Hash索引和B+ Tree索引,我们使用的是InnoDB引擎,默认的是B+树

    InnoDB使用的B+ Tree的索引模型,那么为什么采用B+ 树?这和Hash索引比较起来有什么优缺点?

    B+ Tree索引和Hash索引区别 哈希索引适合等值查询,但是不无法进行范围查询 哈希索引没办法利用索引完成排序 哈希索引不支持多列联合索引的最左匹配规则 如果有大量重复键值得情况下,哈希索引的效率会很低,因为存在哈希碰撞问题

    B+ Tree的叶子节点都可以存哪些东西?

    在 InnoDB 里,索引B+ Tree的叶子节点存储了整行数据的是主键索引,也被称之为聚簇索引。而索引B+ Tree的叶子节点存储了主键的值的是非主键索引,也被称之为非聚簇索引。

    聚簇索引和非聚簇索引,在查询数据的时候有区别?

    聚簇索引查询会更快
    因为主键索引树的叶子节点直接就是我们要查询的整行数据了。而非主键索引的叶子节点是主键的值,查到主键的值以后,还需要再通过主键的值再进行一次查询,这个过程称作回表。
    非主键索引一定会查询多次吗?
    覆盖索引也可以只查询一次,覆盖索引(covering index)指一个查询语句的执行只用从索引中就能够取得,不必从数据表中读取。也可以称之为实现了索引覆盖。 当一条查询语句符合覆盖索引条件时,MySQL只需要通过索引就可以返回查询所需要的数据,这样避免了查到索引后再返回表操作,减少I/O提高效率。 如,表covering_index_sample中有一个普通索引 idx_key1_key2(key1,key2)。当我们通过SQL语句:select key2 from covering_index_sample where key1 = ‘keytest’;的时候,就可以通过覆盖索引查询,无需回表。

    Index Condition Pushdown(索引下推)

    MySQL 5.6引入了索引下推优化,默认开启,使用SET optimizer_switch = ‘index_condition_pushdown=off’;可以将其关闭。官方文档中给的例子和解释如下: people表中(zipcode,lastname,firstname)构成一个索引

     WHERE zipcode=95054AND lastname LIKE%etrunia%AND address LIKE%Main Street%;
    

    如果没有使用索引下推技术,则MySQL会通过zipcode='95054’从存储引擎中查询对应的数据,返回到MySQL服务端,然后MySQL服务端基于lastname LIKE '%etrunia%'和address LIKE '%Main Street%'来判断数据是否符合条件。 如果使用了索引下推技术,则MYSQL首先会返回符合zipcode='95054’的索引,然后根据lastname LIKE '%etrunia%'筛选出符合条件的索引后再返回到MySQL服务端,然后MySQL服务端基于address LIKE '%Main Street%'来判断数据是否符合条件,这样返回给MySQL服务端的索引数又会减少。有了索引下推优化,可以在有like条件查询的情况下,减少回表次数。

    查询优化器

    一条SQL语句的查询,可以有不同的执行方案,至于最终选择哪种方案,需要通过优化器进行选择,选择执行成本最低的方案。 在一条单表查询语句真正执行之前,MySQL的查询优化器会找出执行该语句所有可能使用的方案,对比之后找出成本最低的方案。这个成本最低的方案就是所谓的执行计划。 优化过程大致如下: 1、根据搜索条件,找出所有可能使用的索引 2、计算全表扫描的代价 3、计算使用不同索引执行查询的代价 4、对比各种执行方案的代价,找出成本最低的那一个

    展开全文
  • 主键索引主键索引,简称主键,原文是PRIMARY KEY,由一个或多个列组成,用于唯一性标识数据表中的某一条记录。一个表可以没有主键,但最多只能有一个主键,并且主键值不能包含NULL。在MySQL中,InnoDB数据表的主键...
  • MySQL索引之主键索引

    2020-12-15 16:43:01
    在MySQL里,主键索引和辅助索引分别是什么意思,有什么区别? 上次的分享我们介绍了聚集索引和非聚集索引的区别,本次我们继续介绍主键索引和辅助索引的区别。 1、主键索引 主键索引,简称主键,原文是PRIMARY KEY,...
  • mysql主键索引、非主键索引、联合索引、覆盖索引、最左匹配、索引下推
  • 导读在MySQL里,主键索引和辅助索引分别是什么意思,有什么区别?上次的分享我们介绍了聚集索引和非聚集索引的区别,本次我们继续介绍主键索引和辅助索引的区别。1、主键索引主键索引,简称主键,原文是PRIMARY KEY...
  • 聚簇索引和非聚簇索引(主键索引和非主键索引主键索引也被称为聚簇索引。 聚簇索引:聚簇索引并不是一种单独的索引类型,而是一种数据存储方式。聚簇索引将索引和数据行放到了一块,找到索引也就找到了数据。...
  • MySQL提供多种索引类型供选择:普通索引 、唯一性索引、主键索引 、全文索引等等。下面本篇文章就来给大家介绍一下主键索引和普通索引之间的区别 ,希望对你们有所帮助。普通索引普通索引是最基本的索引类型,而且它...
  • MySQL提供多种索引类型供选择:普通索引 、唯一性索引、主键索引 、全文索引等等。下面本篇文章就来给大家介绍一下主键索引和普通索引之间的区别 ,希望对你们有所帮助。普通索引普通索引是最基本的索引类型,而且它...
  • 一、MySQL常见的索引类型如下MySQL常见索引有:主键索引、唯一索引、普通索引、全文索引、组合索引PRIMARY KEY(主键索引)ALTER TABLE `table_name` ADD PRIMARY KEY (`column`) UNIQUE(唯一索引) ALTER T...
  • MySQL索引之主键索引在MySQL里,主键索引和辅助索引分别是什么意思,有什么区别?上次的分享我们介绍了聚集索引和非聚集索引的区别,本次我们继续介绍主键索引和辅助索引的区别。1、主键索引主键索引,简称主键,...
  • 以下回答全部是基于MySQL的InnoDB引擎例如对于下面这一张表如果我们按照 name 字段来建立索引的话,采用B+树的结构,大概的索引结构如下如果我们要进行模糊查找,查找name 以“张"开头的所有人的ID,即 sql 语句为...
  • 主键索引主键索引,简称主键,原文是PRIMARY KEY,由一个或多个列组成,用于唯一性标识数据表中的某一条记录。一个表可以没有主键,但最多只能有一个主键,并且主键值不能包含NULL。在MySQL中,InnoDB数据表的主键...
  • 以下回答全部是基于MySQL的InnoDB引擎例如对于下面这一张表如果我们按照 name 字段来建立索引的话,采用B+树的结构,大概的索引结构如下如果我们要进行模糊查找,查找name 以“张"开头的所有人的ID,即 sql 语句为...
  • MySQL重新建立主键索引和非主键索引的方法 重新建立主键索引方法 这是错误的写法 alter table T drop primary key; alter table T add primary key(id); mysql官方文档写了三种措施: 整个数据库迁移,先dump出来...
  • 唯一索引和主键索引区别: 一个表只能有一个主键索引,但是可以有多个唯一索引 主键索引一定是唯一索引,唯一索引则不一定是主键索引 主键索引可以与外键构成完整性约束,唯一索引不可以 唯一性索引列允许空值,而...
  • 在数据库关系图中为表32313133353236313431303231363533e58685e5aeb931333431366334定义主键将自动创建主键索引主键索引是唯一索引的特定类型。该索引要求主键中的每个值都唯一。当在查询中使用主键索引时,它还...
  • 在数据库关系图中为表定义主键将自动创建主键索引主键索引是唯一索引的特定类型。该索引要求主键中的每个值都唯一。当在查询中使用主键索引时,它还允许对数据的快速访问。2、种类不同:根据数据库的功能,可以在...
  • 一般是在建表的时候指定了主键,就会创建主键索引, CREATE INDEX不能用来创建主键索引,使用 ALTER TABLE来代替。 如何使用? 方式1:ALTER TABLE table_name ADD PRIMARY KEY ( column ) 比如:ALTER TABLE users ...
  • 以下回答全部是基于MySQL的InnoDB引擎例如对于下面这一张表如果我们按照 name 字段来建立索引的话,采用B+树的结构,大概的索引结构如下如果我们要进行模糊查找,查找name 以“张"开头的所有人的ID,即 sql 语句为...
  • 主键索引主键索引不可以为空 主键索引可以做外键 一张表中只能有一个主键索引 普通索引: 用来加速数据访问速度而建立的索引。多建立在经常出现在查询条件的字段和经常用于排序的字段。 被索引的数据列允许...
  • MySQL中的索引(主键索引篇) 主键索引是一种特殊的唯一索引,一个表只能有一个主键,不允许有空值。一般是在建表的时候同时添加主键索引; 一、如何添加主键索引 修改表添加主键索引 Alter table 表名 add ...
  • MySQL主键索引

    2019-12-09 15:41:23
    1、创建表时,把某个列设为主键的时候,则该列就是主键索引 create table inprimirykey( id int unsigned primary key auto_increment, name varchar(32) not null default ''); 2、查看索引 show index from ...
  • 在MySQL里,主键索引和辅助索引分别是什么意思,有什么区别?上次的分享我们介绍了聚集索引和非聚集索引的区别,本次我们继续介绍主键索引和辅助索引的区别。1、主键索引主键索引,简称主键,原文是PRIMARY KEY,由...
  • 主键索引和普通索引的区别

    万次阅读 2019-08-07 17:46:28
    主键索引和普通索引的区别 主键索引的叶子结点存放了整行记录,普通索引的叶子结点存放了主键ID,查询的时候需要做一次回表查询 一定要回表查询么? 不一定,当查询的字段刚好是索引的字段或者索引的一部分,就可以...
  • 1.在表上定义主键PRIMARY KEY,InnoDB将主键索引用作聚簇索引; 2.如果表没有定义主键,InnoDB会选择第一个不为NULL的唯一索引列用作聚簇索引; 3.如果以上两个都没有,InnoDB 会使用一个6 字节长整型的隐式字段 ROWID...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 21,247
精华内容 8,498
关键字:

主键索引