了解MySQL中的索引

前端之家收集整理的这篇文章主要介绍了了解MySQL中的索引前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我试图理解MySQL中的索引.我知道在表中创建的索引可以加快执行查询速度,并且可以减慢行的插入和更新速度.

创建索引时,我在名为authors的表上使用此查询,该表包含(AuthorNum,AuthorFName,AuthorLName,…)

Create index Index_1 on Authors ([What to put here]);

我知道我必须列一个列名,但哪一个?

用户查询表或什么时,我是否必须在Where语句中放置要比较的列名?

最佳答案
指数剖析

索引是数据库中的独特数据结构,是数据冗余.其主要目的是通过逻辑排序提供索引数据的有序表示,该逻辑排序独立于物理排序.我们使用双向链表和称为平衡搜索树(B树)的树结构来完成此操作. B树很好,因为它们可以对数据进行排序,并允许在对数时间内进行搜索,访问,插入和删除.由于双向链表,我们可以根据需要在索引上轻松地向后或向前查找各种查询.插入变得简单,因为我们只需重新排列指向不同数据的指针.数据库使用这些双向链表来连接叶节点(通常在B树或B树中),每个叶节点存储在页面中,并在叶节点之间建立逻辑排序. UPDATE或INSERT之类的操作变慢,因为它们实际上是文件系统中的两个写操作(一个用于表数据,一个用于索引数据).

用WHERE定义最佳索引

要定义最佳索引,您不仅必须了解索引的工作方式,还必须了解应用程序如何查询数据.例如,您必须知道WHERE子句中出现的列组合.

对LAST_NAME和FIRST_NAME列的查询的常见限制是区分大小写.例如,我们不想像Hotinger那样进行精确搜索,而是希望匹配所有结果,例如HoTingEr等.这在WHERE子句中很容易做到:我们只说WHERE UPPER(LAST_NAME)= UPPER(‘Hotinger’)

但是,如果我们定义LAST_NAME和查询的索引,它实际上会运行全表扫描,因为查询不在LAST_NAME上,而是在UPPER(LAST_NAME)上.从数据库的角度来看,这是完全不同的.因此,在这种情况下,您应该在UPPER(LAST_NAME)上定义索引.

索引不一定必须是一列.例如,如果主键是一个复合键(由多列组成),它将创建一个连接索引,也称为组合索引.请注意,连锁索引的排序对其可用性和可伸缩性有重大影响,因此必须谨慎选择.基本上,排序应该与WHERE子句中的排序方式相匹配.

用LIKE定义最佳索引

通配符的位置产生巨大的差异. LIKE子句仅在树遍历期间使用通配符之前的字符;其余的不会缩小扫描的索引范围. LIKE子句的前缀越具有选择性,扫描索引就越窄.这使索引查找更快.作为提示,请避免使用带有“%OTINGER%”等通配符的LIKE子句.对于全文搜索,MysqL提供MATCH和AGAINST关键字.从MysqL 5.6开始,您可以拥有全文索引.请查看MysqLFull-Text Search Functions,以便对索引这些结果进行更深入的讨论.

原文链接:/mysql/434024.html

猜你在找的MySQL相关文章