2011-01-03 1 views
4

내가 아주 간단한 테이블 이 (오류/어리 석음을 용서, 난 아직 배우는 중이에요 MySQL을 위해 작성.) :색인을 생성해야하는 항목은 무엇입니까? 사용자 이름 또는 사용자 ID?

CREATE TABLE IF NOT EXISTS `userdata` (
    `userid` UNSIGNED int(18446744073709551615) AUTO_INCREMENT, 
    `username` char(255) NOT NULL, 
    `password` char(255) NOT NULL, 
    `salt`  char(255) NOT NULL, 
    `email`  char(255) NOT NULL, 

    PRIMARY KEY(`userid`) 
); 

내가 인덱스를 추가하는 등의 쿼리의 성능을 향상 읽었습니다 전체 데이터베이스를 조사 할 필요가 없습니다. 대신 색인과 일치하는 데이터를 살펴볼 것입니다 (내가 틀렸다면 수정하십시오).

인덱스를 만드는 방법을 찾았지만 색인을 생성해야하는 것은 아닙니다.
사용자 이름에 색인을 추가해야합니까? 아직 추가하지 않은 이메일 주소, 사용자 ID 또는 일부 입력란

+0

이는 테이블에서 실행중인 쿼리 유형에 따라 다릅니다. 이름이나 ID 또는 둘 모두로 검색 할 것입니까? –

+0

검색을위한 이름 (예 : 여기에있는 검색 도구 또는 포럼에서 찾은 도구)과 내부적으로 ID가 가장 비슷합니다. 나는 무엇이든을 사용하는 것을 기꺼이한다 가장 빠르다. – Alexander

답변

3

WHERE 에서 당신이 컬럼의 실제 사용

사용에 따라 인덱스를 생성한다 : 당신이 WHERE username='xyz'을하지 않아도 경우
가의 인덱스가
을 필요하지 않습니다 당신이 많은 경우 이 중 다음 을 조인에 인덱스를

사용을 추가
을 당신이 어떤이 결코 경우이면 색인이 필요하지 않음
색인이 추가 된 경우

+0

그렇다면 기본 키로 설정된 사용자 ID 필드를 수동으로 인덱싱하는 것은 쓸모가 없습니까? – Alexander

+1

설명하는 기사에 대한 링크를 빨리 찾을 수 없지만 도움이 될 수 있습니다. http://www.databasejournal.com/features/mysql/article.php/1382791/Optimizing-MySQL-Queries-and-Indexes. htm –

+2

@Alexander. 예, db가 복제 된 퍽이 없다는 것을 효율적으로 검사하기 위해 색인을 생성해야하므로 중복 될 가능성이 큽니다. – albertov

0

Primay ID는 사용자 ID로 이동합니다. 그것은 현재와 장기적으로 매우 도움이됩니다.

2

검색 할 필드는 무엇입니까? 그것들은 당신의 첫 인덱스 후보가되어야합니다. 또한 다른 테이블에서 외래 키가 될 모든 열을 색인화하십시오 (userid은 가능성있는 후보로 보입니다).

+0

사용자 검색과 관련된 모든 필드 (암호 및 소금 제외). – Alexander

4

키순 조회를 수행하는 거의 모든 열의 색인이 있어야합니다. 검색어 중 하나에 무언가가 where userid = ? (으)로 표시됩니까? 그런 다음 userid에 색인을 생성하십시오. username에서 조회 할 예정입니까? 그런 다음 사용자 이름에 대해 색인을 생성하십시오. password은 어떨까요? 아마도 그렇지 않으므로 신경 쓰지 마세요.

+0

기본 키는 이미 자동으로 "색인 생성"됩니다. 열 유형을 "직렬"로 만들고 멀리 이동하십시오. – Kzqai