当前位置:Gxlcms > 数据库问题 > MySQL【十】认识索引

MySQL【十】认识索引

时间:2021-07-01 10:21:17 帮助过:11人阅读

认识mysql中的key:
    index key    普通索引,能够加速查询,辅助索引
    unique key   唯一 + 索引,辅助索引
    primary key  唯一 + 非空 + 聚集索引
        主键作为条件的查询如果能够让索引生效那么效率总是更高
    foreign key  本身没有索引的,但是它关联的外表中的字段是unique索引
    primary key 和unique 标识的字段不需要再添加索引
        直接就可以利用索引加速查询
    能用unique的时候尽量不用index
        unique除了是索引之外还能做唯一约束,如果做了唯一约束
        b+树就更健康
技术图片 技术图片
索引 : 实际上就是一个搜索表时使用的目录
    聚集索引 : 叶子节点内直接存储行内容
        只有innodb存储引擎才有聚集索引
        主键
    辅助索引 : 叶子节点中的数字指向数据的具体地址
        innodb中和myisam中都可以存在
innodb 对应2个文件 表结构 数据 + 索引
myisam 对应3个文件 表结构 纯数据 辅助索
技术图片

聚集索引和辅助索引

技术图片

技术图片
id name gender age
1 alex male 18
primary key   index 
聚集索引      辅助索引

创建普通索引
create index 索引名 on 表名(字段名)
desc 表名;
+--------+-----------------------+------+-----+---------+----------------+
| Field  | Type                  | Null | Key | Default | Extra          |
+--------+-----------------------+------+-----+---------+----------------+
| id     | int(11)               | NO   | PRI | NULL    | auto_increment |
| name   | varchar(20)           | YES  |     | NULL    |                |
| sex    | enum(‘male‘,‘female‘) | NO   |     | male    |                |
| age    | int(11)               | YES  | MUL | NULL    |                |
| dep_id | int(11)               | YES  |     | NULL    |                |
+--------+-----------------------+------+-----+---------+----------------+
show create table 表名;
| employee | CREATE TABLE `employee` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(20) DEFAULT NULL,
  `sex` enum(‘male‘,‘female‘) NOT NULL DEFAULT ‘male‘,
  `age` int(11) DEFAULT NULL,
  `dep_id` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `ind_age` (`age`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8 |
技术图片

结论:

聚集索引:叶子节点直接存储行内容,健康的树查询速度快仅需3次IO;(select * from 表名 where id = 20;),用聚集索引查找内容;

辅助索引:叶子节点中的数字指向数据的内存地址,我们通过用辅助索引查找到数据的内存地址后需要回表到聚集索引,拿着数据的内存地址找到真实的数据,需要6次IO;

注意:如果我们在创建表结构的时候没有创建主键(聚集索引),那么mysql会自动的帮我们创建一个主键,这个主键我们是看不到的,因为只有主键才是聚集索引,那么我们以后查询表中的数据都是通过辅助索引查询的,因为辅助索引比聚集索引遇到的IO多,查询速度更慢些,所以一般我们在创建表结构的时候都是自定义主键,这样能更好的利用聚集索引的优势;

MySQL【十】认识索引

标签:target   bar   engine   primary   优势   比较   简单介绍   大数据   忽略   

人气教程排行