Mysql学习笔记

本文探讨了MySQL中索引的原理与优化,包括索引失效的情况,如类型转化和不满足最左匹配原则。介绍了InnoDB与MyISAM存储引擎的区别,如事务支持、锁粒度和索引类型。还提到了查询InnoDB死锁的方法及索引下推技术,用于提升查询效率。
摘要由CSDN通过智能技术生成
索引
  • 索引是一种数据结构
  • 并不是走索引就一定比全表扫描快
索引失效
  • 查询语句中存在类型转化或者运算
create table t_test(
	a int primary key,
	b int,
	c int,
	d int,
	e varchar(20)
)engine innodb;
create index idx_b_c_d on t_test(b,c,d);
create index idx_e on t_test(e);

select * from t_test where a + 1 = 2; # 不可以走索引
select * from t_test where e = '1';  # 可以走索引
select * from t_test where e = 1;  # 不可以走索引

因为在MySQL在进行字符串与数字类型的数据进行比较时,会先将字符串转化成数字类型,然后进行比较;如果字符串是个数的话转化成对应的数值,否则都转换为0;

  • 不满足最左匹配原则
使用覆盖索引

当需要查询的字段在索引中时,可以通过查询索引来获取所要查找的内容,因为索引相对与数据文件来说占用空间小,可以通过索引查询来进行数据查询

存储引擎类型
- innoDB
- MyISAM
- MEMORY
innoDB和MyISAM的区别
  • innoDB支持事务,MyISAM不支持事务
  • innoDB中锁的最小粒度是行锁,MyISAM锁的最小粒度是表锁
  • innoDB支持外键,MyISAM不支持
  • innoDB不存储表的记录数,每次查询进行全表扫描,MyISAM存储有表中记录的条数
  • innoDB的主键索引是聚集索引,MyISAM的主键索引是非聚集索引;innoDB的数据和主键索引放在同一个文件中,主键索引的叶子节点是数据,其他索引的叶子节点存储的是数据的主键。MyISAM的数据和索引是分离开来的,索引的叶子几点存储的是数据的地址。
查询innoDB的死锁问题
show engine innoDB status;
索引下推(index condition pushdown)
  • 索引下推的概念:在使用ICP的情况下,如果存在某些被索引的列的判断条件时,MySQL服务器将这一部分判断条件传递给存储引擎,然后由存储引擎通过判断索引是否符合MySQL服务器传递的条件,只有当索引符合条件时才会将数据检索出来返回给MySQL服务器 。
  • 索引下推在非主键索引上的优化,可以有效减少回表的次数,大大提升了查询的效率。
  • 索引下推相关的参数
  set optimizer_switch='index_condition_pushdown=off';
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值