mysql - 使用字符索引查找数值

标签 mysql select indexing

我在 mysql 表上有一列主要存储数值,但有时存储字符串。它被定义为 VARCHAR(20)。此列上有前四个字符的索引。

ADD INDEX `refNumber` USING BTREE(`refNumber`(4));

由于该字段主要是数字,因此用户能够查询落在数字范围内(例如 100 到 2000)的值非常有用。如果我使用数字比较,则不使用此索引。

WHERE refNumber BETWEEN 100 AND 2000

如果我使用字符串比较,我会得到一些我不想要的值(例如,在查询 100 到 2000 的范围时返回 10000)。

WHERE refNumber BETWEEN '100' AND '2000'

有好的解决办法吗?

注意:有些值是在前面补零记录的,例如0234,在查找100到2000之间的值时应返回该值。

最佳答案

三种可能性

1) 将数值分隔到它们自己的列中。

2) 如果您必须保持原样,请确定数字的最大长度,将数字用零或空白填充到该长度。

3) 我不知道 MySQL 是否支持基于函数的索引,但这可能是一个选项。如果是这样,编写一个函数返回提取的数值并将其用作索引的基础。

关于mysql - 使用字符索引查找数值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1751804/

相关文章:

mysql - 从索引表中高效查询

php - 空格和特殊字符更新查询不起作用,具有 50 个输入字段的 html 表单 47 是 int 没有问题,3 是文本/字符串问题

mysql - 我如何根据 mySQL 中的另一列选择一列?

php - 使用一个 SQL 请求更新多行

javascript - 在用于 html 控件的 javascript 中选择索引更改事件

javascript - AngularJS 禁用先前选择的下拉选项

mysql - 需要关于如何索引和优化特定 MySQL 数据库的建议

git - 从所有分支和标签中完全删除 git 存储库对象并将更改推送到远程

mysql - 多个表上的 sequelize 查询中的竞争条件

mysql - 将 Amazon EMR Spark 与 MySQL 连接(写入数据)