Mysql存储引擎与索引

Mysql存储引擎:

Mysql有两种存储引擎:MyISAM和InnoDB
MyISAM:

MyISAM 引擎是 MySQL 5.1 及之前版本的默认引擎,它的特点是:
	(1)不支持行锁,读取时对需要读到的所有表加锁,写入时则对表加排它锁
	(2)不支持事务
	(3)不支持外键	
	(4)不支持崩溃后的安全恢复	
	(5)在表有读取查询的同时,支持往表中插入新纪录
	(6)支持 BLOB 和 TEXT 的前500个字符索引,支持全文索引
	(7)支持延迟更新索引,极大提升写入性能
	(8)对于不会进行修改的表,支持压缩表,极大减少磁盘空间占用

InnoDB:

InnoDB 在 MySQL 5.5 及以后成为默认索引,它的特点是:
	支持行锁,采用 MVCC 来支持高并发
	支持事务
	支持外键
	支持崩溃后的安全恢复
	不支持全文索引

InnoDB场景:

InnoDB 是一个事务型存储引擎,为用户操作非常大的数据存储提供了一个强大的解决方案,已经被很多互联网公司使用。
在以下场合下,使用InnoDB是最理想的选择:
	更新密集的表:InnoDB存储引擎特别适合处理多重并发的更新请求。
	事务:InnoDB 存储引擎是支持事务的标准MySQL存储引擎。
	自动灾难恢复:与其它存储引擎不同,InnoDB表能够自动从灾难中恢复。
	外键约束:MySQL支持外键的存储引擎只有InnoDB。
	支持自动增加列 AUTO_INCREMENT 属性。

Mysql索引

mysql的索引分为单列索引(全文索引,主键索引,唯一索引,普通索引)和组合索引。
	单列索引:一个索引只包含一个列,一个表可以有多个单列索引。
	
	组合索引:一个组合索引包含两个或两个以上的列,
	
	普通索引:仅加速查询

	唯一索引:加速查询 + 列值唯一(可以有null)

	主键索引:加速查询 + 列值唯一(不可以有null)+ 表中只有一个

	组合索引:多列值组成一个索引,专门用于组合搜索,其效率大于索引合并(最左前缀:意思是必须包括最左边的列索引
	
	举个例子:(假设现在有组合索引(a,b,c),查询语句就只能是a=1或a=1and b=1或a=1 and b=1 and c=1。这里有两点需要注意
	①a=1 and b=1和b=1 and a=1一样,没有区别,都会使用索引
	②组合索引(a,b,c)的最左前缀是a;组合索引(c,b,a)的最左前缀是c,最左前缀和表字段顺序无关
	)

	全文索引:对文本的内容进行分词,进行搜索

索引失效

1.如果条件中有or,即使其中有条件带索引也不会使用(这也是为什么尽量少用or的原因)	要想使用or,
又想让索引生效,只能将or条件中的每个列都加上索引

2.使用查询的时候遵循mysql组合索引的"最左前缀"规则,假设现在有组合索引(a,b,c),查询语句就只能是a=1
  或a=1and b=1或a=1 and b=1 and c=1。这里有两点需要注意①a=1 and b=1和b=1 and a=1一样,没有区别,都会
  使用索引②组合索引(a,b,c)的最左前缀是a;组合索引(c,b,a)的	最左前缀是c,最左前缀和表字段顺序无
  关在组合索引中,如果where查询条件中某个列使用了范围查询(不管%在哪),则其右边的所有列都无法使用
  索引优化查询
	
3.like查询以%开头

4.如果列类型是字符串,那一定要在条件中将数据使用引号引用起来,否则不使用索引

5.如果mysql估计使用全表扫描要比使用索引快,则不使用索引

6.对索引列运算,运算包括(+、-、*、/、!、<>、%、like'%_'(%放在前面)、or、in、exist等),导致索引失效

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值