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

loginには、インデックス付けされていない一意のインデックスがpasswordあります。

最初の結果を見つけた後、mysqlは実行を停止しますか?

4

1 に答える 1

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

UNIQUE CONSTRAINT / INDEXでフィルタリングしているので、制限は必要ありません。

余談ですが、プレーンテキストのパスワードをデータベースに保存しないでください。

ログインが一意のインデックスである場合、クエリは「Jhon」が見つかるとインデックスbツリーの検索を停止します。ログインとパスワードの2つの条件があるため、クエリプランの最適化の誤りを回避するために(技術的に不可能なはずの)ログインインデックスを使用するようにMySQLにヒントを与えることができます。

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'
于 2013-03-21T12:37:36.917 に答える