MySQL自娱—13.索引

  • 索引(index)是帮助mysql高效获取数据的数据结构。提取句子主干,就可以得到索引的本质:索引就是数据结构。

  • 索引的分类

    - 主键索引
      - PRIMARY KEY 唯一的标识,主键不可重复,只能有一个
    - 唯一索引
      - UNIQUE KEY 避免重复的列出现。唯一索引可以重复,多个列都可以标识为唯一索引。
    - 常规索引
      - KEY/INDEX 默认的,关键字来设置
    - 全文索引
      - FullText 在特定的数据库引擎下才有,MyISAM。快速定位数据
    
  • 实例演示

    # 创建一个有索引的表
    
    CREATE TABLE IF NOT EXISTS `student` (
      `StudentNo` INT(4) NOT NULL AUTO_INCREMENT COMMENT '学号',
      `passwd` VARCHAR(20) NOT NULL COMMENT '密码',
      `name` VARCHAR(30) NOT NULL DEFAULT '匿名' COMMENT '姓名',
      `sex` CHAR(1) NOT NULL DEFAULT '女' COMMENT '性别',
      `birthday` DATETIME DEFAULT NULL COMMENT '生日',
      `gradeid` INT(10) NOT NULL COMMENT '学生id',
      `address` VARCHAR(100) DEFAULT NULL COMMENT '住址',
      `Email` VARCHAR(50) DEFAULT NULL COMMENT '邮箱',
      `IdentityCard` VARCHAR(18) DEFAULT NULL COMMENT '身份证号',
      PRIMARY KEY (`StudentNo`), 
      UNIQUE KEY `IdentityCard` (`IdentityCard`),
      KEY `Email` (`Email`)
    )ENGINE=INNODB DEFAULT CHARSET=utf8 comment='学生表';
    
    # 查看索引信息
    SHOW INDEX FROM student;
    
    # 增加一个全文索引
    ALTER TABLE `student` ADD FULLTEXT INDEX `name`(`name`);
    
    # explain分析sql的执行情况
    explain select * from student;
    explain select * from student where match(`name`) against('刘');
    
  • 创造百万数据做测试

    delimiter &&     -- 写函数之前必须要写,标志
    
    create function mock_data()
    return int
    begin
      declare num int default 1000000;
      declare i int default 0;
      
      while i<num do
           -- 插入语句
           set i=i+1;
      end while
    end;
    
    insert into app_user(`字段1`,'字段2'...) values(concat('用户',i),'xxx@qq.com')
    
    # 没整理完 回头研究这个
    
  • 索引的原则

    - 索引不是越多越好
    - 不要对经常变动数据加索引
    - 小数据量的表不需要加索引
    - 索引一般加在常用来查询的字段上
    
  • 索引的数据结构

    - Hash类型的索引
    - Btree: InnoDB的默认数据结构
    
posted @ 2022-01-08 21:03  梵高de画笔  阅读(25)  评论(0编辑  收藏  举报