MySQL EXPLAIN语句显示类型上的所有
我有一个简单的问题 我有一个包含以下SQL的表:MySQL EXPLAIN语句显示类型上的所有,mysql,indexing,explain,Mysql,Indexing,Explain,我有一个简单的问题 我有一个包含以下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 A
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 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
如果有人能解释这一点,我们将不胜感激!谢谢 这意味着必须扫描整个表格。在这种情况下,密码和用户名上的索引没有帮助(在“(username,password)”上没有键) 第二个查询使用两个键
这里可以找到更详细的解释:MySQL无法优化
或条件。因此,即使索引可以满足或的两个部分,它也不会使用它们
您应该能够通过使用联合来解决此问题:
SELECT * FROM users WHERE username = 'xx'
UNION
SELECT * FROM users WHERE password = 'xx'
每个子查询都可以使用索引,然后合并结果