MySQL索引

索引(index)是帮助MySQL高效获取数据的数据结构,是现实中性能问题的首要问题。

索引类型

B-Tree索引

B-Tree意味着数据存储是有序的,并且每个叶子页到根的距离是一样的。B-Tree索引加速了数据访问,因为存储引擎不会扫描整个表得到需要的数据。而是从根节点开始进行树查找。因为B-Tree按顺序保存了索引的列,它们对于搜索范围数据很有用。

能使用B-Tree索引的查询类型

B-Tree索引能很好地用于全键值、键值范围或键前缀查找。

B-Tree索引的一些局限

如果查找没有从索引列的最左边开始,他就没有用处。

不能跳过索引中的列。

存储引擎不能优化访问任何在第一个范围条件右边的列。

哈希索引(Memory引擎)

哈希索引建立在哈希表的基础上,它只对使用了索引中的每一列的精确查找有用。对于每一行,存储引擎计算出了被索引列的哈希码,它是一个比较小的值,并且有可能和其它行的哈希码相同。它把哈希码保存在索引中,并且保存了一个指向哈希表中每一行的指针。

哈希索引的一些局限

因为索引只包含了哈希码和行指针,而不是值自身,MySQL不能使用索引中的值来避免读取行。幸运的是,访问内存中的行很快,因此这通常不会降低性能。

MySQL不能使用哈希索引进行排序,因为它们不会按序保存行。

哈希索引不支持部分键匹配,因为它们是由被检索的全部值计算出来的。

哈希索引只支持使用了=、IN()、和<=>的相等比较,不能加快范围查询。(注意<>和<=>不是相同的运算符)

访问哈希索引中的数据非常快,除非碰撞率非常高。当发生碰撞的时候,存储引擎必须访问链表中的每一个行指针,然后逐行进行数据比较,以确定正确的数据。

InnoDB存储引擎有一个特别的功能,叫自适应哈希索引。当InnoDB注意到一些索引值被频繁访问的时候,它就回在B-Tree的顶端为这些值建立内存中的索引。


MySQL索引是一种数据结构,可以帮助MySQL快速定位和访问表中的数据。使用索引可以提高查询效率,降低数据库的负载。下面是MySQL索引的一些基本概念和使用方法: 1. 索引类型 MySQL支持多种类型的索引,包括B树索引、哈希索引、全文索引等。其中,B树索引是最常用的一种,也是默认的索引类型。B树索引可以用于精确匹配和范围查询,而哈希索引主要用于等值查询,全文索引则用于文本检索。 2. 索引创建 可以在创建表时指定索引,例如: ``` CREATE TABLE users ( id INT PRIMARY KEY, name VARCHAR(50), email VARCHAR(50), INDEX idx_email (email) ); ``` 也可以在已有的表上添加索引,例如: ``` ALTER TABLE users ADD INDEX idx_name (name); ``` 3. 索引使用 查询语句中可以使用WHERE子句和ORDER BY子句来利用索引,例如: ``` SELECT * FROM users WHERE email = 'example@example.com'; SELECT * FROM users WHERE name LIKE 'John%' ORDER BY id DESC; ``` 需要注意的是,索引并不是越多越好,过多的索引会占用过多的磁盘空间并降低写操作的性能。因此,需要根据实际情况选择合适的索引。同时,还需要定期对索引进行维护,包括优化查询语句、删除不必要的索引等。 4. 索引优化 MySQL提供了一些工具来优化索引,例如EXPLAIN命令可以帮助分析查询语句的执行计划,找出慢查询和不必要的全表扫描。可以使用OPTIMIZE TABLE命令来优化表的索引和碎片,从而提高查询性能。还可以使用缓存来避免频繁的查询操作,例如使用Memcached或Redis等缓存工具。 以上就是MySQL索引的一些基本概念和使用方法,需要根据实际情况进行选择和优化
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值