MySQL:用于搜索的最佳列类型

时间:2011-08-04 00:02:50

标签: mysql search

我一直在MySQL数据库中插入一些数字作为INT UNSIGNED。我使用“SELECT.tablename WHERE A LIKE'B'在此列上执行搜索。我遇到了一些数字格式,这些格式对于无符号整数来说太长或者在其中有破折号,如123-456-789。

在这里修改表有哪些好的选择?我看到两个选项(还有其他选项吗?):

  1. 创建另一列(VARCHAR(50))以使用破折号存储数字。当搜索查询检测到带破折号的数字时,请查看此新列。

  2. 使用VARCHAR(50)而不是此列的无符号整数重新创建表。

  3. 我不确定在(a)数据库结构和(b)搜索速度方面哪种方式更好。我喜欢这方面的一些投入。谢谢。

    更新:我想我应该包含更多信息。 这些是订单号。没有短划线的数字用于一个商店(A),带有破折号的数字用于亚马逊(B; 13或14位数,我认为有两个破折号)。 A的订单号应该是可排序的。我不确定B是否必须,因为这些数字对我来说没有任何意义(只是一个唯一的数字)。

    如果删除短划线并将它们全部放在一起作为大整数,搜索查询的性能是否会有所降低?

3 个答案:

答案 0 :(得分:2)

最重要的问题是您希望如何使用这些数据。你需要什么?如果你创建一个varchar,然后你想将它排序为数字,你将无法,因为它将它视为字符串.. 你总是可以考虑使用big int,但问题是:你需要破折号吗?或者你可以在应用程序级别忽略它们吗?如果你需要它们,这意味着你需要varchar。在这种情况下,如果您希望能够将它们排序为数字或执行任何计算,则有两列可能是有意义的。否则可能更有意义。 你应该提供更多有关问题的背景信息

答案 1 :(得分:1)

Mysql具有PROCEDURE ANALYSE,可帮助您识别现有数据集。 here是一些例子。

鉴于您主要运行查询WHERE A LIKE 'B'。如果“A”变化很大,您也可以尝试全文搜索。

答案 2 :(得分:0)

我认为选项2最有意义。只需将新列添加为varchar(50),将int列中的所有内容放入该varchar中,然后删除int。有两个单独的列来维护,这不是一个好主意。