gpt4 book ai didi

mysql - 在 MySQL 中索引 VARCHAR

转载 作者:可可西里 更新时间:2023-11-01 08:03:06 28 4
gpt4 key购买 nike

与 INT 字段相比,VARCHAR 字段的索引性能相同还是更差?

我有一个包含两个字段的表(都是 VARCHAR)。我想在第一列上创建一个索引。我心里有两件事。1.直接在第一个字段上创建索引。2. 为第一个字段中的每个 VARCHAR 分配一个整数,并将它们存储在一个表中。然后用整数替换第一列中的 VARCHAR,并在第一列上创建另一个表和索引(在这种情况下它将是整数列)。我将在这里得到两个不同的表。

此外,如果我有 4 或 5 个表的第一个字段相同,并且必须在每个表的第一个字段上创建索引,第二种方法会提供更好的性能吗?

提前致谢。

最佳答案

VARCHAR() 列上的索引确实比 INTBIGINT 等固定长度字段上的索引效率稍低。但并不明显。

您希望使用包含文本字符串编号列表的第二个表的唯一可以想到的情况是:应用程序中不同文本字符串的数量远小于行数在你的 table 上。为什么那是真的?例如,文本字符串可能是所谓的 "controlled vocabulary." 中的单词。例如,音乐轨道具有“摇滚”、“古典”或“嘻哈”等流派。在这样的应用程序中允许任意类型(如“南加州另类冲浪摇滚”)毫无意义。

不要想太多。请记住,数据库服务器开发人员花费了大量时间来优化其索引的性能。您几乎不可能比他们做得更好,尤其是当您必须向系统引入额外的表和约束时。

根据需要在您的 VARCHAR() 列上放置索引。

(另一个因素:排序规则被嵌入到 VARCHAR() 列的索引中。如果您像您建议的那样构建自定义索引方案,则必须在代码中处理这种复杂性。它是众所周知的颈部疼痛。)

要了解和讲述的有趣事实:在过去的计算时代(当时所有酷 child 都有 T1 线)系统提供称为“原子”的对象。这些是用 ID 号引用的文本字符串。原子出现在 X 窗口系统中(例如)在 xlib function call XInternAtom() and related functions 中.为什么?部分是为了节省内存和网络带宽,这在当时比现在更稀缺。部分原因是本文前面提到的“受控词汇”目的。

关于mysql - 在 MySQL 中索引 VARCHAR,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45965514/

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