Mysql--索引

索引的好处:
1 可以帮助服务器避免排序。

B-Tree索引在如下的情况中会生效
测试表结构:

CREATE TABLE `people` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `last_name` varchar(255) DEFAULT NULL,
  `first_name` varchar(255) DEFAULT NULL,
  `nick_name` varchar(255) DEFAULT NULL,
  `createtime` datetime DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `last_name_first_name_createtime_index` (`last_name`,`first_name`,`createtime`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;

1 全值匹配–联合索引在查询中均用到了,

SELECT * 
FROM people
WHERE 
last_name="tang"
AND first_name="xi"
AND createtime='2019-01-09 00:00:00'

2 匹配最左前缀–使用组合索引的第一列

EXPLAIN 
SELECT * 
FROM people
WHERE 
last_name="tang"

3 匹配列前缀–只匹配某一列的开头部分,

EXPLAIN 
SELECT * 
FROM people
WHERE 
last_name="t%"

4 匹配范围值

EXPLAIN 
SELECT * 
FROM people
WHERE 
last_name>"a"

AND last_name<"c"

5 精确匹配某一列并范围匹配另外一列

EXPLAIN 
SELECT * 
FROM people
WHERE 
last_name>"b"
AND createtime>'2019-01-09 00:00:00'
AND createtime<'2020-01-09 00:00:00'

多列索引:
当服务器出现and查询时,有必要创建组合索引。
一般将选择性高的放在最左边,同时考虑部分列是否能筛除掉大部分数据,则也可以考虑将该列放在最左边。

T-Tree的一些规则
1 如果不是按照索引定义的顺序来查询,则无法使用到索引。
2 不能跳过索引中间的某些列。
3 如果某个列用到范围查询,则其右边都无法用到索引进行优化查找。

Hash索引:
哈希索引,将会把指定列的数据通过hash算法计算出一个哈希码,将hash码和数据地址存在hash索引中。

hash索引的优缺点
1 hash索引容易出现hash碰撞,如果出现hash碰撞, 则会以列表的形式存储多行记录的地址。
2 hash索引的值不是按照索引值排序的,无法用于排序(疑问点)。
3 hash索引不支持匹配查询,因为hash索引总是使用列的值来进行计算hash值,所以hash只支持比较查询

摘自《高性能Mysql》

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值