大数据的情况下规避模糊查询前面加%的情况下
sql提示
为什么介绍覆盖索引尽量避免使用select *?
因为使用select * 很容易出现回表查询的情况
建索引:针对username password 建立联合索引 不需要回表查询
前缀索引
单列索引和联合索引
索引设计原则
2. B+树索引 在b+树当中所有数据都会出现在叶子节点中,而且叶子节点形成双向链表
hash索引 hash表 只需要运算出对应的hash值 只支持精确匹配,不支持范围查询
3.主键索引: 建表的时候,只要在建表中指定了主键,主键默认建立主键索引
唯一索引: 如果有一例它不会重复的
聚集索引: 叶子节点下挂着这一行的数据 默认主键索引就是聚集索引
二级索引: 叶子节点下挂着主键
联合索引:遵循最左前缀法则,最左边的列必须存在,如果最左边的列不存在,整个联合索引失效,如果最左边的列存在,但中间跳过了某一列,那么后面的列失效;
索引失效的情况
1.不要再索引列上进行函数运算,否则索引失效
2.字符串不加单引号会造成隐式类型转换失效
3.like模糊匹配如果前面加了%,那代表前面进行模糊匹配,索引失效
4.or连接的条件如果一侧有索引一侧无索引 ,那么索引失效
5.如果mysql评估如果走全表扫描比走索引快,那么索引失效
覆盖索引:查询返回的列在索引结构中都包含不要需要回表查询
回表查询:查询的时候先走二级索引检索到这一行数据的id,再根据id到聚集索引中查找数据
前缀索引:遇到字符串长度较长或大文本数据,可以使用前缀索引缩小长度
索引设计原则
在where或者group by 之后添加索引
1如果这一列是唯一的,尽量建唯一索引;
2如果能建立联合索引尽量使用联合索引;
3如果涉及字符串长度较长大文本尽量使用前缀索引;
SQL优化
插入数据
insert优化
插入大批量数据
order by 优化
age 升序排 phone 降序排
总结
group by 优化
limit 优化
count 优化
update 优化
inoodb引擎三大特性 事务 外键 行级锁