MySQL:存储包含连字符的 Amazon.com 订单号

标签 mysql

我遇到一个问题,我需要将 Amazon.com 的订单号存储到 MySQL 表中。 Amazon.com 订单号由数字和连字符组成,例如 102-1234567-1234567(17 个数字和 2 个连字符)。由于某些情况下的连字符,我看到这个“数字”存储为字符串,随后,对该列的搜索是字符串搜索而不是数字搜索。

现在,我只是将它们存储为 VARCHAR(19),但是有没有一种方法可以存储它以便在存储和检索时更高效、更快速?例如,我想过将每个数字段解析成它自己的一列(一个订单“数字”总共 3 列)并执行 ... WHERE colA=102 AND colB=1234567 AND colC=1234567 提取特定订单,而不是执行 ...WHERE col LIKE '102-1234567-1234567'。我知道前者使用的字节少得多,但它也更快吗?我正在处理的表有超过 10 万行,而且每天都在增长一小部分。

关于我应该如何修改结构或不应该如何修改的任何建议或意见? TIA!

最佳答案

这些订单号实际上不是数字。这些是字符串,因此应存储为字符串。

我不知道 Amazon 订单的详细信息,但如果它们的长度始终为 19 个字符,您可以使用 CHAR(19) 代替 VARCHAR(19) 以及使用 ASCII 字符集代替任何多字节。那应该使它更快一点。此外,创建一个将完全覆盖该列的索引(即长度为 19)也可能有助于提高性能,以及使用 = 而不是 LIKE

关于MySQL:存储包含连字符的 Amazon.com 订单号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8887612/

相关文章:

php - Mysql SELECT语句按计数排序

MYSQL ERROR 2049 (HY000) : Connection using old (pre-4. 1.1) 使用身份验证协议(protocol) ref(启用客户端选项 'secure_auth')

mysql - 我正在执行完整的外部连接并出现错误

mysql - Spring Boot 应用程序无法连接到 Google Cloud SQL

c++ - 使用内置 MySQL 库静态构建 Qt

mysql - 当从 MySQL 中的连接表中进行选择时,连接操作是否发生在选择之前?

mysql - 如何将数据库的尼泊尔日期转换为英文日期?

mysql - 如何三重连接表以查找和查找匹配两个事物的条目?

MySQL COUNT、GROUP BY 和 ORDER BY

c# - 在 SQL 查询中转义值(带有 SQL 连接器的 C#)