• mysql 索引


    一、索引

      索引,是数据库中专门用于帮助用户快速查询数据的一种数据结构。类似于字典中的目录,查找字典内容时可以根据目录查找到数据的存放位置,然后直接获取即可。

                        30
     
            10                        40
     
       5         15            35             66
     
    1   6     11    19      21      39     55     100  

    MySQL中常见索引有:

    • 普通索引
    • 唯一索引
    • 主键索引
    • 组合索引

    二、普通索引

      普通索引仅有一个功能:加速查询  

     1 mysql> desc student;
     2 +---------------+---------------+------+-----+---------+----------------+
     3 | Field         | Type          | Null | Key | Default | Extra          |
     4 +---------------+---------------+------+-----+---------+----------------+
     5 | stu_id        | int(11)       | NO   | PRI | NULL    | auto_increment |
     6 | name          | varchar(50)   | YES  |     | NULL    |                |
     7 | register_date | date          | NO   |     | NULL    |                |
     8 | gender        | enum('M','F') | NO   |     | NULL    |                |
     9 +---------------+---------------+------+-----+---------+----------------+
    10 4 rows in set (0.00 sec)
    11 
    12 mysql> create index student_name on student(name);
    13 Query OK, 0 rows affected (0.06 sec)
    14 Records: 0  Duplicates: 0  Warnings: 0
    创建索引
    mysql> mysql> show index from student;
    +---------+------------+--------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
    | Table   | Non_unique | Key_name     | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment |
    +---------+------------+--------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
    | student |          0 | PRIMARY      |            1 | stu_id      | A         |           6 |     NULL | NULL   |      | BTREE      |         |               |
    | student |          1 | student_name |            1 | name        | A         |           6 |     NULL | NULL   | YES  | BTREE      |         |               |
    +---------+------------+--------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
    2 rows in set (0.00 sec)
    查看索引
    # 语法
    drop index index_name on table_name
    
    mysql> drop index student_name on student;
    Query OK, 0 rows affected (0.03 sec)
    Records: 0  Duplicates: 0  Warnings: 0
    删除索引
    # 语法
    alter table table_name add index index_name (column_list);
    
    mysql> alter table student add index student_name (name);
    Query OK, 0 rows affected (0.04 sec)
    Records: 0  Duplicates: 0  Warnings: 0
    修改表结构增加索引

      如果是CHAR,VARCHAR类型,length可以小于字段实际长度;如果是BLOB和TEXT类型,必须指定 length。

      

     三、唯一索引

      它与前面的普通索引类似,不同的就是:索引列的值必须唯一,但允许有空值。如果是组合索引,则列值的组合必须唯一。它有以下几种创建方式: 

    # 创建唯一索引
     CREATE UNIQUE INDEX index_name on table_name(column_name(length))
    
    # 修改表结构创建
    ALTER TABLE table_name add INDEX index_name on (column_name(length))
    
    # 创建表的时候指定
    CREATE TABLE mytable( 
      
    ID INT NOT NULL,  
      
    username VARCHAR(16) NOT NULL, 
      
    UNIQUE [indexName] (username(length)) 
      
    ); 
    

    四、主键索引 

    主键只能作用于一个列上,添加主键索引时,你需要确保该主键默认不为空(NOT NULL)。实例如下:
    mysql> ALTER TABLE testalter_tbl MODIFY i INT NOT NULL;
    mysql> ALTER TABLE testalter_tbl ADD PRIMARY KEY (i);
     
    你也可以使用 ALTER 命令删除主键:
    mysql> ALTER TABLE testalter_tbl DROP PRIMARY KEY;
    删除指定时只需指定PRIMARY KEY,但在删除索引时,你必须知道索引名。
    

      删除主键索引

    alter table 表名 drop primary key;
    alter table 表名  modify  列名 int, drop primary key;
    

      

    五、组合索引 

      组合索引是将n个列组合成一个索引

    create table in3(
        nid int not null auto_increment primary key,
        name varchar(32) not null,
        email varchar(64) not null,
        extra text
    )
    
    创建表
    创建表
    create index ix_name_email on in3(name,email);
    创建索引
  • 相关阅读:
    关于bool operator() 几种变种实现的整理
    C# 访问修饰符
    C# 运算符
    c# 集合、存储及排序、迭代
    【并查集】tree
    【最大流】【POJ1149】PIGS
    【拆边最小费用流】【Asia Harbin 2010/2011】【Transportation】
    【DP】【GG选题】
    【DP】【芝麻开门】
    【搜索】【2012 Dhaka Regional】E Poker End Games
  • 原文地址:https://www.cnblogs.com/bigberg/p/8309285.html
Copyright © 2020-2023  润新知