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

    千次阅读 2017-02-03 11:48:20
    http://www.cnblogs.com/huangye-dream/archive/2013/06/03/3115262.html1.PRIMARY KEY(主键索引mysql>ALTER TABLE table_name ADD PRIMARY KEY ( column ) 2.UNIQUE(唯一索引) mysql>ALT

    mysql添加索引命令
    http://www.cnblogs.com/huangye-dream/archive/2013/06/03/3115262.html

    1.PRIMARY KEY(主键索引)
    mysql>ALTER TABLE table_name ADD PRIMARY KEY ( column )
    2.UNIQUE(唯一索引)
    mysql>ALTER TABLE table_name ADD UNIQUE (
    column )
    3.INDEX(普通索引)
    mysql>ALTER TABLE table_name ADD INDEX index_name ( column )
    4.FULLTEXT(全文索引)
    mysql>ALTER TABLE table_name ADD FULLTEXT ( column )
    5.多列索引
    mysql>ALTER TABLE table_name ADD INDEX index_name ( column1, column2, column3 )

    MySQL主键删除/添加
    2修改数据库和表的字符集
    alter database maildb default character set utf8;//修改数据库的字符集
    alter table mailtable default character set utf8;//修改表的字符集
    如果您想要把表默认的字符集和所有字符列(CHAR, VARCHAR, TEXT)改为新的字符集,应使用如下语句:
    ALTER TABLE tbl_name CONVERT TO CHARACTER SET charset_name;
    警告:前面的操作转换了字符集之间的列类型。如果您有一列使用一种字符集(如latin1),但是存储的值实际上使用了其它的字符集(如utf8),这种情况不是您想要的。此时,您必须对这样的列进行以下操作。
    ALTER TABLE t1 CHANGE c1 c1 BLOB;
    ALTER TABLE t1 CHANGE c1 c1 TEXT CHARACTER SET utf8;
    这种方法能够实现此功能的原因是,当您转换到BLOB列或从BLOB列转换过来时,并没有发生转换。
    3 MySQL的主键问题:
    Mysql的两种主键。Primary key 和not null auto_incriment
    在建立mysql表时,给一个字段添加了主键primary key
    在insert数据时可以不用insert主键,mysql会自动添加0,但是在第二次insert时没有填写值mysql数据库还是默认添加0,会导致有重复的主键,这是不可以的。所有在定义了primary key时,在insert数据时要给主键填写值。
    在建立mysql表时,给一个字段添加了主键not null auto_increment=1;
    这也是一个主键。时自增长的以1为开始。这个字段是可以不用填写值的,mysql数据库会自动给填写值,不会出现primary key的状况。
    Alter table tb add primary key(id);
    Alter table tb change id id int(10) not null auto_increment=1;
    4 删除自增长的主键id
    先删除自增长在删除主键
    Alter table tb change id id int(10);//删除自增长
    Alter table tb drop primary key;//删除主建

    展开全文
  • 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、对比各种执行方案的代价,找出成本最低的那一个

    展开全文
  • mysql 主键索引,组合索引,单列索引使用场景 CREATE TABLE button ( id bigint(20) NOT NULL AUTO_INCREMENT, --主键索引 button_name varchar(45) NOT NULL COMMENT ‘功能名称’, app_id bigint(20) NOT NULL, ...

    mysql 主键索引,组合索引,单列索引使用场景

    CREATE TABLE button (
    id bigint(20) NOT NULL AUTO_INCREMENT, --主键索引
    button_name varchar(45) NOT NULL COMMENT ‘功能名称’,
    app_id bigint(20) NOT NULL,
    permission_id bigint(20) DEFAULT NULL, – permission_id 和 app_id 联合索引。
    api_id bigint(20) NOT NULL, --api_id单独索引
    PRIMARY KEY (id),
    KEY index_app_permission_lianhe (permission_id,app_id) USING BTREE,
    KEY index_api_id_dange (api_id)
    ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8
    主键索引,单独索引,组合索引使用场景及优化
    表button 有3个索引,分别是:id主键,联合索引(permission_id,app_id),api_id(单列索引)
    button_name 无索引
    查询where条件中:
    主键索引:
    1、主键索引与联合索引同时存在,使用主键索引
    2、主键索引与单个索引同时存在,使用主键索引
    结论:只要主键索引在,使用主键索引。
    联合索引 :
    1、联合索引与单列索引列 同时存在,使用单列索引
    2、联合索引中列顺序颠倒无影响。
    3、联合索引实行最左侧原则(最左原则在我另一篇博客有提到)。
    4、如果查询条件中只有app_id,但是select 条件中有 permission_id,则也使用联合索引。
    5、select id,app_id from button where app_id=1001; 使用联合索引
    6、explain select id,app_id,button_name from button where app_id=1001;不使用联合索引

    结论:索引优先级:主键索引,单列索引,组合索引
    联合索引中遵从最左侧列原则。
    当查询条件和返回结果中仅仅包含联合索引中索引项,也使用联合索引。如第4条。
    当查询条件中出现联合索引中非最左侧索引列,返回结果中含义联合索引中的列或者主键则也使用联合索引。

    展开全文
  • Mysql主键索引、唯一索引、普通索引、全文索引、组合索引的区别

    Mysql索引概念:
    说说Mysql索引,看到一个很少比如:索引就好比一本书的目录,它会让你更快的找到内容,显然目录(索引)并不是越多越好,假如这本书1000页,有500也是目录,它当然效率低,目录是要占纸张的,而索引是要占磁盘空间的。


    Mysql索引主要有两种结构:B+树和hash.

    hash:hsah索引在mysql比较少用,他以把数据的索引以hash形式组织起来,因此当查找某一条记录的时候,速度非常快.当时因为是hash结构,每个键只对应一个值,而且是散列的方式分布.所以他并不支持范围查找和排序等功能.

    B+树:b+tree是mysql使用最频繁的一个索引数据结构,数据结构以平衡树的形式来组织,因为是树型结构,所以更适合用来处理排序,范围查找等功能.相对hash索引,B+树在查找单条记录的速度虽然比不上hash索引,但是因为更适合排序等操作,所以他更受用户的欢迎.毕竟不可能只对数据库进行单条记录的操作. 


    Mysql常见索引有:主键索引、唯一索引、普通索引、全文索引、组合索引

    PRIMARY KEY(主键索引)  ALTER TABLE `table_name` ADD PRIMARY KEY ( `column` ) UNIQUE(唯一索引)     ALTER TABLE `table_name` ADD UNIQUE (`column`)
    INDEX(普通索引)     ALTER TABLE `table_name` ADD INDEX index_name ( `column` ) FULLTEXT(全文索引)      ALTER TABLE `table_name` ADD FULLTEXT ( `column` )
    组合索引   ALTER TABLE `table_name` ADD INDEX index_name ( `column1`, `column2`, `column3` ) 

    Mysql各种索引区别:
    普通索引:最基本的索引,没有任何限制
    唯一索引:与"普通索引"类似,不同的就是:索引列的值必须唯一,但允许有空值。
    主键索引:它 是一种特殊的唯一索引,不允许有空值。 
    全文索引:仅可用于 MyISAM 表,针对较大的数据,生成全文索引很耗时好空间。
    组合索引:为了更多的提高mysql效率可建立组合索引,遵循”最左前缀“原则。

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

    千次阅读 2019-03-06 18:19:54
    主键是逻辑键,索引是物理键。主键不实际存在,而索引实际存在于数据库中。 索引会真正产生文件。数据会真正产生文件。 redo log 记录的内容:物理日志,"某个数据页上做了什么修改" ,循环使用。 bin log...
  • Mysql主键索引、唯一索引、普通索引、全文索引、组合索引的区别 MySQL索引原理及慢查询优化 Mysql索引概念: 说说Mysql索引,看到一个很少比如:索引就好比一本书的目录,它会让你更快的找到内容,...
  • MySQL 主键索引长度不够怎么解决! 环境:Linux Center OS 目标:安装 james-server-app-3.4.0 邮件服务 数据库: MySql 8.0.18 james 启动过程创建数据表结构抛出异常: Caused by: org.apache.openjpa.lib.jdbc....
  • 主键索引主键索引不可以为空 主键索引可以做外键 一张表中只能有一个主键索引 普通索引: 用来加速数据访问速度而建立的索引。多建立在经常出现在查询条件的字段和经常用于排序的字段。 被索引的数据列允许...
  • 普通索引:最基本的索引,没有任何限制 唯一索引:与"普通索引"类似,不同的就是:索引列的值必须唯一,但允许有空值。 主键索引:它 是一种特殊...Mysql常见索引有:主键索引、唯一索引、普通索引、全文...
  • 主键索引也叫聚簇索引,非主键索引也是二级索引。 主键索引存储的是主键id和全部数据,二级索引储存的是索引值和主键值,当我们查询的字段不在索引储存的数据中,就会进行回表,即通过普通索引找到主键值,再通过主...
  • Mysql主键索引创建的实例

    千次阅读 2016-04-03 22:16:14
    1、在上面了解了Mysql常见的索引后,...2、主键索引  2.1 在创建表的时候,指定主键索引 create table table_primarykey ( id int primary key auto_increment , name varchar(20) ); 利用 show create table table_p
  • 如何删除mysql 主键索引

    千次阅读 2019-06-06 09:31:24
    如果一个主键是自增长的,不能直接删除该列的主键索引, 应当先取消自增长,再删除主键特性 alter table 表名 drop primary key; 【如果这个主键是自增的,先取消自增长.】 具体方法如下: alter table articles ...
  • InnoDB主键索引的存储结构是:叶子节点存储了主键值和其他字段数据值其他索引的存储结构是:叶子节点存储了索引值和主键索引值 区别是其他索引存的是主键索引值 MyIsam索引的存储结构是:叶子节点存储了主键值和...
  • MySQL索引之主键索引

    2020-12-15 16:43:01
    MySQL里,主键索引和辅助索引分别是什么意思,有什么区别? 上次的分享我们介绍了聚集索引和非聚集索引的区别,本次我们继续介绍主键索引和辅助索引的区别。 1、主键索引 主键索引,简称主键,原文是PRIMARY KEY,...
  • 一、MYSQL索引的分类 索引用于快速查找具有特定列值的行。如果没有索引,MySQL必须从第一行开始,然后读取整个表以查找...MYSQL的索引主要分为主键索引(PRIMARY KEY),唯一索引(UNIQUE),普通索引(INDEX)和全文索...
  • 主要介绍了MySQL中的主键索引与聚焦索引的概念,文中也对比了两种索引有何不同,需要的朋友可以参考下
  • MySQL重新建立主键索引和非主键索引的方法 重新建立主键索引方法 这是错误的写法 alter table T drop primary key; alter table T add primary key(id); mysql官方文档写了三种措施: 整个数据库迁移,先dump出来...
  • 一般是在建表的时候指定了主键,就会创建主键索引, CREATE INDEX不能用来创建主键索引,使用 ALTER TABLE来代替。 如何使用? 方式1:ALTER TABLE table_name ADD PRIMARY KEY ( column ) 比如:ALTER TABLE users ...
  • 主要介绍MySQL 主键索引的联系与区别,使用mysql的朋友可以看下
  • 1、概念 1)、查看索引 show index from 数据库表名 2)、alter table 数据库表...1)、PRIMARY KEY(主键索引) ALTER TABLE table_name ADD PRIMARY KEY ( column ) 2)、UNIQUE(唯一索引) ALTER TABLE table...
  • Oracle与Mysql主键索引及分页的区别,学习oracle的朋友可以参考下
  • 主键索引 主键索引就是聚簇索引,每张表有且只能有一个主键,可以由一个或多个字段组成。 主键索引的三个条件:1.主键键值必须是唯一2.不能含有null值3.保证主键是自增的 自增列作主键可以使写入的顺序也是自增的,...
  • explain select * from cust_stat.performance where ym='201805'结果发现mysql并没有应用主键索引。给ym字段单独加上索引以后,发现查询正常应用了索引。推断估计是如果是联合主键,自动建的也是联合主键索引,如果...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 152,206
精华内容 60,882
关键字:

mysql主键索引

mysql 订阅