mysql 索引

索引类型:

       normal:表示普通索引(常用)

         unique:表示唯一的,不允许重复的索引,如果该字段信息保证不会重复例如身份证号用作索引时,可设置为unique

         full textl: 表示 全文搜索的索引。 FULLTEXT 用于搜索很长一篇文章的时候,效果最好。用在比较短的文本,如果就一两行字的,普通的 INDEX 也可以

 

索引方式:

         (推荐)B-Tree:B-Tree 索引是 MySQL 数据库中使用最为频繁的索引类型,除了 Archive 存储引擎之外的其他所有的存储引擎都支持 B-Tree 索引。不仅仅在 MySQL 中是如此,实际上在其他的很多数据库管理系统中B-Tree 索引也同样是作为最主要的索引类型,这主要是因为 B-Tree 索引的存储结构在数据库的数据检 索中有非常优异的表现

  (不推荐)Hash :(1)Hash 索引仅仅能满足"=","IN"和"<=>"查询,不能使用范围查询。由于 Hash 索引比较的是进行 Hash 运算之后的 Hash 值,所以它只能用于等值的过滤,不能用于基于范围的过滤,因为经过相应的 Hash 算法处理之后的 Hash 值的大小关系,并不能保证和Hash运算前完全一样

                        (2)Hash 索引无法被用来避免数据的排序操作

                        (3)Hash 索引不能利用部分索引键查询

                        (4)Hash 索引在任何时候都不能避免表扫描

        (5)Hash 索引遇到大量Hash值相等的情况后性能并不一定就会比B-Tree索引高

创建索引语句:

       在执行CREATE    TABLE语句时可以创建索引,也可以单独用CREATE    INDEX或ALTER    TABLE 来为表增加索引。

      1.ALTER   TABLE

      ALTER TABLE 用来创建普通索引、UNIQUE索引或PRIMARY  KEY索引

      ALTER TABLE table_name ADD INDEX  index_name (column_list);    

      ALTER TABLE table_name ADD UNIQUE(column_list);(定义唯一)

      ALTER TABLE table_name ADD PRIMARY KEY (column_list);(定义主键)

其中table_name是要增加索引的表名,cloumn_list指的是要添加索引的列,多列时用”,”隔开,索引名index_name可选,缺省时,mysql将根据第一个索引列赋一个名称另外,ALTER TABLE允许在单个语句中更改多个表,因此可以同时创建多个索引

      2.CREATE INDEX

      CREATE INDEX 可对表增加普通索引或UNIQUE索引

      CREATE INDEX index_name ON table_name (column_list);

      CREATE UNIQUE INDEX index_name ON table_name (column_list);

table_name、index_name和column_list具有与ALTER TABLE语句相同的含义,索引名可不选,特别注意不能用CREATE INDEX语句创建PRIMARY KEY索引

      在创创建索引时,可以规定索引能否包含重复值。如果不包含应该用PRIMARY KEY或UNIQUE索引。对于单列唯一性索引,这保证单列不包含重复的值。对于多列唯一索引,保证多个值的组合不重复。PEIMARY KEY 索引和UNIQUE索引非常相似。PRIMARY KEY索引仅是一个具有名称PRIMARY的UNIQUE索引。这表示一个表只能包含一个PRIMARY KEY,因为一个表中不可能具有两个同名的索引

 

      删除索引

      可利用ALTER TABLE 或 DROP INDEX 语句来删除索引,类似CREATE INDEX语句,DROP INDEX可以在ALTER TABLE内部作为一个语句处理

      DROP INDEX index_name ON table_name;

      ALTER TABLE table_name DROP INDEX index_name;

      ALTER TABLE table_name DROP PRIMARY KEY

      其中前两句是等价的,删除掉table_name中的索引index_name,第三条语句只在删除PRIMARY KEY索引时使用,因为一个表只可能有一个PRIMARY KEY索引,所以不需要指定索引名,如果没有创建PRIMARY KEY 索引,但是表中有UNIQUE索引,则会将第一个UNIQUE索引删除。     

      如果从表删除了某列,则索引会受到影响。对于多列组合的索引,如果删除了其中某列,则该列也会从索引中删除。如果删除组成索引的所有列,整个索引将被删除。

 

      查看索引

      SHOW INDEX FROM table_name;

      SHOW KEYS FROM table_name;

Table : 表名

Non_uniqe:如果索引不能包括重复词,则为0,否则为1.

Key_name:索引的名称

Seq_in_index:索引中的列序列号,从1开始。

Column_name:列名称

Collation:列以什么方式存储在索引中。Mysql中,有值’A’(升序)或NULL(无分类)

Cardinality:索引唯一值的数目估计值。通过运行ANALYZE TABLE或myisamchk –a可以更新。基数根据被存储为整数的统计数据来计数,所以即使对于小型表,改值也没有必要是精确的。基数越大,当进行联合时,mysql使用该索引的机会就越大。

Sub_part:如果列只是被部分编入索引,则为被编入索引的字符的数目。如果整列被编入索引,则为NULL

Packed:指示关键字如何被压缩。如果没有被压缩,则为NULL

Null:如果列含有NULL,则含有YES。如果没有则该列含有NO。

Index_type:用过的索引方法(BTREE,FULLTEXT,HASH,RTREE)

转载于:https://www.cnblogs.com/wangjinyu/p/8044041.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值