Like 查询如何与索引表一起使用

Nam*_*ala 5 mysql index select

我正在 Spring-java 和 mysql 工作。

我必须查询尺寸表100k records。表有 10 列。在我的 sql select 查询中,我必须在 4 列上使用 %text% 搜索进行类似的查询。这 4 列是 varchar(200),平均文本大小为 30 个字符。

我浏览了一些博客和答案来了解索引,读完后我想到了这个问题。

将这 4 列单独FULLTEXT索引,会影响类似查询的执行时间吗?

谢谢

Fal*_*con 7

让我帮助您了解“标准”索引的工作原理。

大多数数据库索引只是B 树(不要与二叉树混淆)。简单来说,当您查询索引列时,将执行二分搜索。二分搜索的执行时间通常为 O(log(n)),因此即使有很多行,您也可以非常快地找到各个行。数据库使用 B 树而不是加载和排序表,因为索引不需要太多内存并且需要更少的磁盘读取。

现在想象一下,您尝试对一个值进行二分搜索,但您不知道该值的确切开头或结尾。二分查找基本上是不可能的,你必须遍历几乎整棵树才能找到每一种可能性。

当然,还有比这更聪明的技术。MySQL 并没有那么愚蠢,它使用Boyer-Moore 算法来解决这个问题,但这并不意味着您不会受到性能影响。

全文搜索索引当然会有帮助。它使用完全不同的数据结构(TriesSuffix-Trees)。阅读MySQL的手册,我也觉得全文搜索非常容易。

然而,在大多数系统上,全文搜索需要管理员进行一些维护/管理才能保持良好的性能。通常,全文索引会为索引文本的标记保留“映射/索引”表。随着索引不必要地变大,这些往往会产生碎片,从而影响查询响应时间。因此,应该不时地对它们进行碎片整理和优化。你可能想调查一下。