如果where子句是唯一的索引列,mysql在找到第一个结果后会做什么

如果where子句是唯一的索引列,mysql在找到第一个结果后会做什么,mysql,Mysql,列login具有唯一索引,password没有索引 找到第一个结果后,mysql是否会停止执行 SELECT id FROM mytable WHERE login = 'Jhon' AND password = '123' 很好,限制是不必要的,因为您正在筛选唯一的约束/索引 另外,不要在数据库中存储纯文本密码 如果login是唯一的索引,查询将在找到“Jhon”后停止搜索索引b树。因为您有两个条件:登录和密码,所以您可能希望提示MySQL使用登录索引,以避免(技术上不可能的)查询计划的错误

login
具有唯一索引,
password
没有索引

找到第一个结果后,mysql是否会停止执行

SELECT id FROM mytable WHERE login = 'Jhon' AND password = '123'
很好,限制是不必要的,因为您正在筛选唯一的约束/索引

另外,不要在数据库中存储纯文本密码

如果login是唯一的索引,查询将在找到“Jhon”后停止搜索索引b树。因为您有两个条件:登录和密码,所以您可能希望提示MySQL使用登录索引,以避免(技术上不可能的)查询计划的错误优化

SELECT id FROM mytable WHERE login = 'Jhon' AND password = '123'

不,它仍将搜索整个表。您还需要限制1,当WHERE子句仅为
WHERE login='Jhon'
时,mysql还将搜索整个表?无论是否存在筛选条件(WHERE子句)或notadvermark、Saju,都将使用
select
命令搜索整个表-非常感谢
SELECT id FROM mytable USE INDEX(login) WHERE login = 'Jhon' AND password = '123'
SELECT id FROM mytable FORCE INDEX(login) WHERE login = 'Jhon' AND password = '123'