2012-11-27 2 views
1

MySql 데이터베이스에 사용자 이름과 비밀번호가 있는지 확인하는 데 가장 적합한 쿼리는 무엇입니까?로그인 세부 정보 확인을위한 최적의 쿼리 (사용자 이름 및 비밀번호)

1)SELECT * FROM login_details WHERE username='username' AND password='password' 
2)SELECT count(*)FROM login_details WHERE username='username' AND password='password' 
3)SELECT count(Username)FROM login_details WHERE username='username' AND password='password' 
4)SELECT 1 FROM login_details WHERE username='username' AND password='password' 

감사

+1

내 경험에 비추어 볼 때 엄청난 수의 레코드 (수억 수억 개)를 다루지 않는 한 인덱싱 체계가 사용자가 제안하는 쿼리의 차이보다 훨씬 더 중요합니다. 또한 해시 된 비밀번호를 저장하는 것은 당연한 일입니다! –

답변

8

는 희망 'password' 실제로 salted hash of the user's password, 당신은 parameters to a prepared statement로 응용 프로그램에서 모두 리터럴을 통과하고 있습니다.

당신이 (username, password)에 인덱스를 가지고 가정하면, "최적"은 다음과 같습니다

SELECT EXISTS (
    SELECT * FROM login_details WHERE username = ? AND password = ? 
) 

이 방법으로, MySQL은 stops searching은 하나의 결과가 발생하면.

+0

답변 해 주셔서 감사합니다. 이 경우 내부 쿼리가 가장 좋습니다. 이 내부 쿼리에서 Select *, Select count (*) 또는 Select 1 사이의 성능 차이가 있습니까? – Sajith

+0

[전통적으로,'EXISTS' 부질의는'SELECT *'로 시작하지만'SELECT 5' 또는'SELECT column1' 또는 무엇보다도 아무것도 할 수 없습니다. MySQL은 그러한 서브 쿼리에서'SELECT'리스트를 무시하므로 차이는 없습니다.] (http://dev.mysql.com/doc/en/exists-and-not-exists-subqueries.html) – eggyal

+0

대답. – Sajith

관련 문제