这是我的表架构。
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/