mysql - 为什么它包含 "Using where"?

标签 mysql sql

这是我的表架构。

CREATE TABLE `usr_block_phone` (
    `usr_block_phone_uid` BIGINT (20) UNSIGNED NOT NULL AUTO_INCREMENT,
    `time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
    `usr_uid` INT (10) UNSIGNED NOT NULL,
    `block_phone` VARCHAR (20) NOT NULL,
    `status` INT (4) NOT NULL,
    PRIMARY KEY (`usr_block_phone_uid`),
    KEY `block_phone` (`block_phone`),
    KEY `usr_uid_block_phone` (`usr_uid`, `block_phone`) USING BTREE,
    KEY `usr_uid` (`usr_uid`) USING BTREE
) ENGINE = INNODB DEFAULT CHARSET = utf8

这是我的 SQL

SELECT
    ubp.usr_block_phone_uid
FROM
    usr_block_phone ubp
WHERE
    ubp.usr_uid = 19
AND ubp.block_phone = '80000000001'

顺便说一下,当我运行“EXPLAIN”时,我得到的结果如下。

+------+-------------+-------+------+-----------------------------------------+---------------------+---------+-------------+------+--------------------------+
| id   | select_type | table | type | possible_keys                           | key                 | key_len | ref         | rows | Extra                    |
+------+-------------+-------+------+-----------------------------------------+---------------------+---------+-------------+------+--------------------------+
|    1 | SIMPLE      | ubp   | ref  | block_phone,usr_uid_block_phone,usr_uid | usr_uid_block_phone | 66      | const,const |    1 | Using where; Using index |
+------+-------------+-------+------+-----------------------------------------+---------------------+---------+-------------+------+--------------------------+

为什么索引 usr_uid_block_phone 不起作用? 我只想使用使用索引

该表现在有 20000 行。

最佳答案

您的索引已实际使用,请参阅key列。目前查询看起来不错,执行计划也很好。

填充至少一百个以便使用(并确保您仍然使用仅过滤一行的谓词)。

一般建议:除非您自己是 mysql dbms 开发人员,否则几乎不可能预测优化器在特定情况下的行为方式。因此,最好尝试使用尽可能接近您的产品(在数据大小和质量方面)的数据集。

关于mysql - 为什么它包含 "Using where"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46678927/

相关文章:

php - 从 mysql 数据库中检索数据到下拉列表

mysql - 如何在 MySQL 中查找两个日期之间唯一的一组行?

mysql - 我应该在值数量有限的列上使用索引吗?

sql - 查询以从组中查找第一个和第二个最大值

mysql - sql在两列分组内排序

sql - 在 XMLTYPE 列中插入子节点

php - 数据库表自定义命名约定 Laravel Eloquent

mysql - UNION 和 LIMIT 1 说明

mysql - 删除MySQL列

sql - 是否可以在选择查询结果中包含表名