MYSQL索引1笔记:索引介绍与基本种类
1、Introduction
官方定义:一种帮助MySQL提高查询效率的数据结构。
Advantage:①大大加快查询速度(数据量足够时,甚至可能成百上千倍)
Disadvantages:①维护索引需消耗数据库资源;②索引需占磁盘空间;③增删改时,因维护索引使速度受影响。
2、Species
主要记得I-IV
I. 主键索引:设为主键后数据库自动建立索引,innodb为聚簇索引。 (主键索引列值不能为空)
II. 单值索引:一个索引只包含单个列,一个表可以有多个单列索引。(通俗来说就是为除主键以为的字段创建索引)
III.唯一索引:索引列的值必须唯一,但允许空值。(与主键的不同,能且只能存在一个null)
IV.复合索引:一个索引包含多列(多个列创建一个索引,比如name和phone)
V. 全文索引:FULL TEXT(类型),定义索引列上指出全文查找,允许在这些索引列中插入重复值和空值。可在CHAR、VARCHAR上创建,MYSQL中只支持MYISAM引擎。
操作↓
-- 显示索引
SHOW INDEX FROM app01_userinfo;
-- 主键索引是在建表时自动创建的(PRIMARY KEY)
-- 单值索引创建两种方式:
-- 1、建表时创建 字段名(但无法创建索引名)↓
CREATE TABLE app01_userinfo(id VARCHAR(20) PRIMARY KEY, name VARCHAR(20), KEY(name));
-- 2、建表后创建 ↓ Key_name(索引名) ↓ Column_name(字段名)
CREATE INDEX name_index ON app01_userinfo(name);
-- 唯一索引 (与单值类似)
CREATE TABLE app01_userinfo(id VARCHAR(20) PRIMARY KEY, name VARCHAR(20), UNIQUE(name));
CREATE UNIQUE INDEX name_index ON app01_userinfo(name);
-- 复合索引 (也类似)
CREATE TABLE app01_userinfo(id VARCHAR(20) PRIMARY KEY, name VARCHAR(20), age INT, KEY(name,age));
CREATE INDEX nameageindex ON app01_userinfo(name,age);
-- 注:复合索引满足条件:1.最左前缀原则 2.MYSQL为更好利用索引,查询过程中会动态调整查询字段以利用索引
-- name age phone
-- 条件1情况下只能访问:name/name age/name age phone;加上条件2,就能无视1的顺序比如age name(但不是1中的如: age phone肯定不行,小坑)