10bet网址
MySQL 5.7参考手册
相关的文档10bet官方网站 本手册下载
PDF (Ltr)- 36.3 mb
PDF (A4)- 36.3 mb
手册页(TGZ)- 235.4 kb
手册页(邮政编码)- 347.1 kb
信息(Gzip)- 3.3 mb
信息(邮政编码)- 3.3 mb
本手册节选

MySQL 5.7参考手册/.../ b -树和哈希索引的比较

8.3.8 B-Tree与Hash索引的比较

理解b -树和散列数据结构可以帮助预测在索引中使用这些数据结构的不同存储引擎上执行不同查询的情况,特别是对于内存可以选择b树或哈希索引的存储引擎。

b -树索引特征

类的表达式中可以使用b -树索引进行列比较>> =<<=,或之间的操作符。该索引还可以用于就像比较参数是否为就像不以通配符开头的常量字符串。例如选择语句使用索引:

SELECT * FROMtbl_name在哪里key_col“帕特里克%”;SELECT * FROMtbl_name在哪里key_col“帕特% _ck %”;

在第一个语句中,只有行与“帕特里克。”< =key_col<“Patricl”被认为是。在第二个语句中,只有行与“拍”< =key_col<“保罗”被认为是。

以下选择语句不使用索引:

SELECT * FROMtbl_name在哪里key_col像“%帕特里克%”;SELECT * FROMtbl_name在哪里key_col就像other_col

在第一个表述中,就像值以通配符开头。在第二个表述中,就像值不是一个常数。

如果你使用...像“%字符串%’而且字符串时,MySQL使用涡轮Boyer-Moore算法初始化字符串的模式,然后使用该模式更快地执行搜索。

一个搜索使用col_name为空使用索引,如果col_name是索引。

任何不能张成所有的索引水平在哪里子句不用于优化查询。换句话说,为了能够使用索引,索引的前缀必须在组。

以下在哪里条款使用索引:

...在哪里index_part1= 1,index_part2= 2,other_column= 3 / *指数= 1或指数= 2 */…在哪里指数=1或a =10和指数=2 /*优化的like "index_part1= '你好' " * /…在哪里index_part1= '你好'index_part3=5 /*可以使用索引onindex1但不是在index2index3* /…在哪里index1= 1,index2= 2或index1= 3,index3= 3;

这些在哪里条款做使用索引:

/*index_part1不使用*/…在哪里index_part2= 1,index_part3=2 /* Index在WHERE子句的两个部分都没有使用*/…在哪里指数=1 OR A=10 /*没有索引跨越所有行*/…在哪里index_part1= 1或index_part2= 10

有时MySQL不使用索引,即使有可用的索引。发生这种情况的一种情况是,优化器估计使用索引需要MySQL访问表中很大比例的行。(在这种情况下,表扫描可能要快得多,因为它需要更少的查找。)但是,如果这样的查询使用限制为了只检索其中的一些行,MySQL还是使用索引,因为它可以更快地找到要在结果中返回的少数行。

哈希索引特征

哈希索引的特征与刚才讨论的有些不同:

  • 它们仅用于使用< = >操作符(但非常快)。它们不用于比较运算符,例如<找到一个值的范围。依赖于这种类型的单值查找的系统称为键值存储;要在这样的应用中使用MySQL,尽可能使用散列索引。

  • 优化器不能使用散列索引来加速命令操作。(这种类型的索引不能用于按顺序搜索下一个条目。)

  • MySQL无法确定两个值之间大约有多少行(这由范围优化器用来决定使用哪个索引)。如果您更改了MyISAMInnoDB表到一个哈希索引内存表格

  • 只能使用整个键来搜索一行。(使用b -树索引,键的最左边的任何前缀都可以用来查找行。)