注意:本博客为个人学习记录,不保证正确性,仅供参考指正
索引是什么:
一种有序的存储结构
按照单个或者多个列的值进行排序
索引的目的
索引分类
数据结构:
物理存储:
列属性划分
主键索引:非空唯一索引
唯一索引:允许出现一个null
普通索引
前缀索引:在长字符串中只比较前几个字符
列的个数划分
索引代价
innodb 中表是索引组织表,每张表有且仅有一个主键;
PRIMARY KEY ,则该设置的 key 为该表的主_rowid作为为什么一定要确定一个主键索引呢?
因为在innodb中数据是存在于聚集索引B+树。
B+树以及Innodb B+树特征是什么?
多路平衡搜索树:搜索指有序,中序遍历,比较key进行排序
Innodb B+树特征是:
索引实现:为什么是B+树而不是其他树(如平衡二叉搜索树)
索引使用场景
不要使用索引的场景
外键约束:innodb可以用
父表改动会影响子表
create table parent (
id int not null,
primary key(id)
) engine=innodb;
create table child (
id int,
parent_id int,
foreign key(parent_id) references parent(id)
ON DELETE CASCADE ON UPDATE CASCADE
) engine=innodb;
parent表中删除一行,对应id在child中的相同parent_id的那一行也会删除。
左模糊
explain select * from index_failure_t where name like '谢%';

explain select * from index_failure_t where name like '%谢';

索引参与运算
where
尽量减少索引,因为一个索引就是一颗B+树了
找到慢的sql语句:
SHOW FULL PROCESSLIST
开启慢查询日志
SET GLOBAL slow_query_log = ON; -- on 开启 off关闭
SET GLOBAL long_query_time = 4; -- 单位秒;默认10s;此时设置为4s
分析sql语句
工作中不要用age字段,要存储生日。