mysql - 使用表上的索引时出现问题

标签 mysql

为什么mysql在索引列上搜索空字符串时不使用索引?

explain select * from DEFAULT_TABLE where RANDOMID = '';

| id | select_type | table         | type | possible_keys | key  | key_len | ref  | rows | Extra       |
|  1 | SIMPLE      | DEFAULT_TABLE | ALL  | RANDOMID      | NULL | NULL    | NULL |  108 | Using where |


explain select * from DEFAULT_TABLE where RANDOMID IS NULL;

| id | select_type | table         | type | possible_keys | key       | key_len | ref   | rows | Extra                 |
|  1 | SIMPLE      | DEFAULT_TABLE | ref  | RANDOMID      | RANDOMID  | 9       | const |    1 | Using index condition |

最佳答案

有个类似的问题here .

正如@Solarflare 在评论中所写,当索引字段与不同类型参数进行比较时,MySQL 不使用该字段上的索引,因为字符串顺序与数字顺序不同,并且对于许多其他问题和差异相关到字典整理。

整体不同的类型有不同的'规则',使用索引应该不方便。

关于mysql - 使用表上的索引时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47556364/

相关文章:

php - 使用同一产品 ID 的其他行的值更新字段 mysql 表

php - 在不使用 UNION 的情况下过滤一组值的一列

java - mysql 和 java 中的时区差异

MySQL 尝试从临时表中存储的值更新表

PHP 和 'variable' mySQL 查询

mysql - 如何持续同步/合并两个 MySQL 数据库到第三个数据库

mysql - ExpressJs 使用 ? 执行 MySQL 选择查询参数

mysql - 使用 sailsJS 未将值插入 mysql 数据库

mysql - 如果数据库表为空则不会删除

PHP :Fatal error Call to a member function format() on a non-object