2017-08-30 86 views
2

VARCHAR字段的索引性能是否与INT字段相同或更差?在MySQL中索引VARCHAR

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

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

在此先感谢。

+0

你的文字有多长?而且:你如何访问这些值?你看/搜索文本?你是否想要通过文本值对表中的数据进行排序? – Solarflare

+0

每个条目将为8个字符左右。我只想使用1st field entry搜索第二个字段。无需分类。 – Avinash142857

回答

2

VARCHAR()列上的索引的确效率略低于固定长度字段上的索引,如INTBIGINT。但并不显着。

只能想象的情况您希望使用包含文本字符串编号列表的第二个表格是这样的:应用程序中不同文本字符串的数量远小于表格中的行数。为什么这可能是真的?例如,文本字符串可能是所谓的"controlled vocabulary."中的单词。例如,音乐曲目具有类似“摇滚”,“古典”或“嘻哈”的流派。在这样的应用程序中允许任意类型的“南加州alt-surf-rock”是毫无意义的。

不要过时这一点。请记住,数据库服务器开发人员花费了大量时间来优化索引的性能。你做得比他们做得更好几乎是不可能的,特别是如果你必须为你的系统引入额外的表格和限制。

根据需要在您的VARCHAR()列中加入索引。

(另一个因素:排序规则会被烧入VARCHAR()列的索引中。如果您建立的自定义索引方案与您所建议的一样,则必须在代码中处理这种复杂性,这是一个臭名昭着的痛苦。

有趣的事实知道和说明:在计算机的古老时代(当所有酷的孩子都有T1线时)的系统提供了被称为“原子”的物体。这些是由id号引用的文本字符串。原子出现在X Window System(例如)xlib function call XInternAtom() and related functions中。为什么?部分是为了节省内存和网络带宽,这比现在更为稀少。部分用于本文前面提到的“受控词汇”目的。

+1

如果您希望能够在一个位置更改字符串并且有多个引用该字符串的行使用新值而不会出现异常情况,则+1也可用于将文本字符串移至查找表。这与你所说的完全一样。 –

1

varchar上的索引与int上的索引在性能上的差异足够小,除非进入大规模(例如数亿行的数量级),否则这种差异是无关紧要的。

我的建议是让你的设计简单明了。只需在索引的varchar上运行搜索。

如果您达到了一个您认为这是瓶颈的规模,那么请考虑在当时重新设计。

+0

。让你的应用程序工作。如果它扩大,那么你可以解决性能问题。 –