博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
B-Tree索引
阅读量:6610 次
发布时间:2019-06-24

本文共 1573 字,大约阅读时间需要 5 分钟。

翻译自

理解B-Tree和Hash的数据结构能够帮助我们预测不同存储引擎下的查询性能差异。存储引擎在索引中使用这些数据结构,尤其是MEMORY 同时提供了B-Tree和Hash索引让你选择。

B-Tree索引特性

 

B-Tree索引可以在表达式中使用=, >, >=, <, <=用作列比较或者 BETWEEN 运算符。还能使用LIKE比较,如果参数是一个不以通配符开头的常量。举个例子,下面的SELECT语句使用了索引:

SELECT * FROM tbl_name WHERE key_col LIKE 'Patrick%';

SELECT * FROM tbl_name WHERE key_col LIKE 'Pat%_ck%';

第一条语句中,只有'Patrick' <= keycol < 'Patricl' 的行会被考虑。第二条语句中,只有'Pat' <= keycol < 'Pau' 的行会被考虑。

下面的SELECT语句没有使用索引:

SELECT * FROM tbl_name WHERE key_col LIKE '%Patrick%';

SELECT * FROM tbl_name WHERE key_col LIKE other_col;

第一条语句是因为它以通配符开头,第二条语句是因为没有使用常量。

如果你使用... LIKE '%string%'而且string超过三个字符,那么MYSQL会使用Turbo Boyer-Moore algorithm算法来初始化查询表达式,然后用这个表达式来让查询更迅速。

查询中有colname IS NULL可以使用colname索引。

任何一个没有覆盖所有WHERE中AND级别条件的索引是不会被使用的。也就是说,要使用一个索引,这个索引中的第一列需要在每个AND组中出现。

下面的WHERE条件会使用索引:

... WHERE index_part1=1 AND index_part2=2 AND other_column=3

 

    /* index = 1 OR index = 2 */

... WHERE index=1 OR A=10 AND index=2

 

    /* optimized like "index_part1='hello'" */

... WHERE index_part1='hello' AND index_part3=5

 

    /* Can use index on index1 but not on index2 or index3 */

... WHERE index1=1 AND index2=2 OR index1=3 AND index3=3;

下面的WHERE条件不会使用索引:

    /* index_part1 is not used */

... WHERE index_part2=1 AND index_part3=2

 

    /*  Index is not used in both parts of the WHERE clause  */

... WHERE index=1 OR A=10

 

    /* No index spans all rows  */

... WHERE index_part1=1 OR index_part2=10

有时候mysql不会使用索引,即使在可用的情况下。例如当mysql预估使用索引会读取大部分的行数据时。(在这种情况下,一次全表扫描可能比使用索引更快,因为它需要更少的检索)。然而,假如语句中使用LIMIT来限定返回的行数,mysql则会使用索引。因为当结果行数较少的情况下使用索引的效率会更高。

转载于:https://www.cnblogs.com/dassmeta/p/5360155.html

你可能感兴趣的文章
如何解决安装linux时遇到GPT分区表的问题
查看>>
Windows Server 2016 Storage Replica
查看>>
yum在Centos下安装svn
查看>>
2008 AD 复制有防火墙要开什么端口
查看>>
Find用法总结
查看>>
linux主机中查询当前用户命令总结
查看>>
IT服务管理中的知识库建设
查看>>
4月第四周网络安全报告:发现放马站点域名468个
查看>>
nginx模块--with-http_realip_module
查看>>
【Lucene】Lucene通过CustomScoreQuery实现自定义评分
查看>>
jquery验证
查看>>
我的友情链接
查看>>
linux下的大同小异
查看>>
我的友情链接
查看>>
test
查看>>
我的ubuntu下的防火墙脚本
查看>>
linux 内核网络,数据接收流程图
查看>>
Java基础---Java中方法的重裁(四十一)
查看>>
Mongodb(二)基本概念和操作
查看>>
硬盘接口
查看>>