0
点赞
收藏
分享

微信扫一扫

VR全景展示:传统制造业如何保持竞争优势?

8052cf60ff5c 03-27 09:00 阅读 4

目录

什么是MySql索引

索引的作用

索引的副作用(缺点)

创建索引的原则依据

索引的分类和创建

 

 操作

普通索引

直接创建索引

修改表方式创建

创建表的时候指定索引

唯一索引

直接创建

修改表方式创建

创建表的时候指定

主键索引

创建表的时候指定

 修改表方式创建

组合索引

全文索引

直接创建索引

修改表方式创建

创建表的时候指定索引

删除索引  

直接删除索引

 修改表方式删除索引

 删除主键索引


什么是MySql索引

  • 是一个排序的列表,存储着索引值和这个值所对应的物理地址
  • 索引是帮助MySQL高效获取数据的数据结构

       通俗点的说:

       数据库索引好比是一本书的目录,可以直接根据页码找到对应的内容

       目的就是为了加快数据库的查询速度。

       索引就是一种帮助系统更快查找信息的数据

       索引就是属于优化的一种 

索引的作用

  • 数据库利用各种快速定位技术,加快查询速率
  • 提高表很大或查询多表时的速度
  • 降低数据库IO(输入输出)成本,排序成本
  • 创建唯一性索引可保证数据唯一性
  • 加快表与表之间的联系
  • 减少分组和排序的时间

索引的副作用(缺点)

  • 需要占用额外的磁盘空间
  • 插入修改数据,索引也要随着变,麻烦花时间多

创建索引的原则依据

  • 表的主外键必须有索引
  • 记录超过300行的表应该有索引

       现在正常5百一千行 

  • 经常与其他表连接的表,连接字段上应该建立索引
  • 经常出现在where之句中的字段,特别是大表的字段应该建立索引
  • 建在选择性高的字段上
  • 大的文本字段甚至超长字段,不适合建
  • 唯一性太差的字段不适合 
  • 更新太频繁地字段不适合

索引的分类和创建

  1. 普通索引

         最基本的索引类型,没有唯一性之类的限制。

     2.唯一索引

        与普通索引类似,但唯一索引列的每个值都唯一。
        唯一索引允许有空值。如果是用组合索引创建, 则列值的组合必须唯一。

        添加唯一键将自动创建唯一索引。

     3.主键索引
        是一种特殊的唯一索引,必须指定为“PRIMARY KEY”。
        一个表只能有一个主键,不允许有空值添加主键将自动创建主键索引。   

     4.组合索引(单列索引与多列索引)
        可以是单列上创建的索引,也可以是在多列上创建的索引。

       需要满足最左原则,因为select语句的 where条件是依次从左往右执行的,所以使用select             语句查询时where条件使用的字段顺序必须和组合索引中的排序一致,否则索引将不会生效。

     5.全文索引(FULLTEXT)
        适合在进行模糊查询的时候使用,可用于在一篇文章中检索文本信息。
        全文索引可以在 CHAR、VARCHAR 或者 TEXT 类型的列上创建。

       每个表只允许有一个全文索引。

 

 操作

普通索引

直接创建索引

CREATE INDEX 索引名 ON 表名 (列名[(length)]);

 

修改表方式创建

ALTER TABLE 表名 ADD INDEX 索引名 (列名);

创建表的时候指定索引

CREATE TABLE 表名 ( 字段1 数据类型,字段2 数据类型[,...],INDEX 索引名 (列名));

唯一索引

直接创建

CREATE UNIQUE INDEX 索引名 ON 表名(列名);

 

修改表方式创建

ALTER TABLE 表名 ADD UNIQUE 索引名 (列名);

创建表的时候指定

CREATE TABLE 表名 (字段1 数据类型,字段2 数据类型[,...],UNIQUE 索引名 (列名));

 

主键索引

创建表的时候指定

CREATE TABLE 表名 ([...],PRIMARY KEY (列名));

 修改表方式创建

ALTER TABLE 表名 ADD PRIMARY KEY (列名); 

组合索引

CREATE TABLE 表名 (列名1 数据类型,列名2 数据类型,列名3 数据类型,INDEX 索引名 (列名1,列名2,列名3));

select * from 表名 where 列名1='...' AND 列名2='...' AND 列名3='...';

 (组合索引创建的字段顺序是其触发索引的查询顺序)

全文索引

直接创建索引

CREATE FULLTEXT INDEX 索引名 ON 表名 (列名);

 

修改表方式创建

ALTER TABLE 表名 ADD FULLTEXT 索引名 (列名);

创建表的时候指定索引

CREATE TABLE 表名 (字段1 数据类型[,...],FULLTEXT 索引名 (列名)); 
#数据类型可以为 CHAR、VARCHAR 或者 TEXT
 

补充

各字段的含义:

Table                    表的名称
Non_unique         如果索引内容唯一,则为 0;如果可以不唯一,则为 1。
Key_name           索引的名称。
Seq_in_index       索引中的列序号,从 1 开始。 limit 2,3
Column_name     列名称。
Collation              列以什么方式存储在索引中。在 MySQL 中,有值‘A’(升序)或 NULL(无分                                  类)。
Cardinality         索引中唯一值数目的估计值。
Sub_part          如果列只是被部分地编入索引,则为被编入索引的字符的数目(zhangsan)。如果整                           列被编入索引,则为 NULL 
Packed              指示关键字如何被压缩。如果没有被压缩,则为 NULL。
Null                    如果列含有 NULL,则含有 YES。如果没有,则该列含有 NO。
Index_type        用过的索引方法(BTREE, FULLTEXT, HASH, RTREE)。
Comment          备注。

删除索引  

直接删除索引

DROP INDEX 索引名 ON 表名;

 修改表方式删除索引

ALTER TABLE 表名 DROP INDEX 索引名;

 删除主键索引

ALTER TABLE 表名 DROP PRIMARY KEY;

举报

相关推荐

0 条评论