gpt4 book ai didi

MySQL EXPLAIN 语句显示所有类型

转载 作者:行者123 更新时间:2023-11-29 14:11:08 26 4
gpt4 key购买 nike

我有一个快速且非常简单的问题。

我有一个包含以下 SQL 的表:

CREATE TABLE `users` (
`id` int(20) NOT NULL AUTO_INCREMENT,
`username` char(100) NOT NULL,
`password` char(100) NOT NULL,
PRIMARY KEY (`id`),
KEY `password` (`password`),
KEY `username_2` (`username`)
) ENGINE=MyISAM AUTO_INCREMENT=4 DEFAULT CHARSET=latin1

当我尝试运行如下 EXPLAIN 语句时:

EXPLAIN SELECT * FROM users WHERE username = 'xx' OR `password` = 'xx'

我收到的结果显示我的 type = ALL

但是,当我尝试运行 EXPLAIN 语句时:

EXPLAIN SELECT * FROM users WHERE username = 'xx' AND `password` = 'xx'

我收到的结果显示我有一个 type = REF

我想我的问题是为什么第一个查询显示 ALL,而第二个查询显示 REF。

如果有人能阐明这一点,我们将不胜感激!谢谢!!

最佳答案

MySQL 无法优化 OR 条件。因此,即使索引可以满足 OR 的两个部分,它也不会使用它们。

您应该能够通过使用 UNION 来解决这个问题:

SELECT * FROM users WHERE username = 'xx'
UNION
SELECT * FROM users WHERE password = 'xx'

每个子查询都可以使用索引,然后结果将被合并。

关于MySQL EXPLAIN 语句显示所有类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13489279/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com