gpt4 book ai didi

mysql - 字符串上的 SQL 索引 有帮助吗?

转载 作者:行者123 更新时间:2023-11-29 08:10:39 25 4
gpt4 key购买 nike

所以我在学校的小项目中大量使用了 MySQL;但是,我不会接管企业规模的项目,现在速度很重要,而不仅仅是获取正确的信息。我在 Google 上搜索了很多,试图了解索引如何使我的网站更快,我希望进一步了解它们的工作原理,而不仅仅是何时使用它们。

所以,我发现自己做了很多 SELECT DISTINCTS 以获得所有不同的值,这样我就可以填充我的下拉列表。我听说如果该列被索引的话,速度会更快;但是,我不完全明白为什么。如果此列中的值是整数,我完全可以理解;基本上会创建像 BST 这样的数据结构,搜索时间可以是 Log(n);但是,如果我的列是字符串,它如何将字符串放入 BST 中?这似乎不可能,因为没有度量可以将一个字符串与另一个字符串进行比较(就像数字一样)。看起来索引只会创建该列的所有可能值的列表,但搜索似乎仍然需要数据库遍历每一行,使此搜索呈线性,就像数据库刚刚扫描一样一张普通的 table 。

我的第二个问题是,一旦数据库在索引数据结构中找到正确的值,它会做什么。例如,假设我正在执行 whereage = 42。因此,数据库会遍历数据结构直到找到 42,但它如何将该查找映射到整行呢?索引是否有某种与之关联的行号?

最后,如果我经常执行这些 SELECT DISTINCT 语句,添加索引会有帮助吗?我觉得这对于网站来说一定是一项常见任务,因为许多网站都有下拉菜单,您可以在其中过滤结果,我只是想弄清楚我是否以正确的方式处理它。

提前致谢。

最佳答案

您的逻辑很好,但是,您认为没有度量标准可以将字符串与其他字符串进行比较的假设是不正确的。字符串可以简单地按字母顺序进行比较,为它们提供一个完全可用的比较指标,可用于构建索引。

比较字符串所需的时间比比较整数要长一点,但是,无论比较成本如何,使用索引仍然可以加快速度。

但是我想提一下,如果您像您所说的那样频繁地使用 SELECT DISTINCT,则您的数据库架构可能存在问题。

您应该了解如何规范化数据库。我建议从以下链接开始:http://databases.about.com/od/specificproducts/a/normalization.htm

标准化将为您提供查询机制,其好处远远超过索引所带来的好处。

关于mysql - 字符串上的 SQL 索引 有帮助吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21689515/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com