2010-04-08 4 views

답변

18

인덱스는 정의에 따라 인덱스가 정렬되기 때문에 SELECT 쿼리의 속도가 빨라집니다. 또한 UNIQUE 인덱스는 해당 열의 값 (또는 바운드 열 값의 조합)이 한 번만 존재한다는 제약 조건을 적용합니다 (PRIMARY에도 동일하게 적용되지만 UNIQUE 키와 달리 테이블 당 한 번만 PRIMARY가 존재할 수 있음).

인덱스는 SELECT 쿼리 (사용 된 열에 INDEX가있는 경우) 속도가 엄청나게 빨라지지만 INSERT/UPDATE/DELETE를 통해 테이블을 변경할 때 MySQL 테이블이 더 많은 공간을 소비하고 더 많은 시간을 소비하게 만듭니다.

+15

행복, 인덱스는 책의 색인 같다. 레시피 책이 있다고 가정하고 오믈렛을 만드는 방법을 알고 싶다면 뒤를 건너 뛰고 단어와 페이지 번호를 찾은 다음 그 페이지 번호로 건너 뛰십시오. 이제 색인이없고 400 페이지의 요리법을 검색해야한다고 상상해보십시오. 얼마나 악몽입니까! – studioromeo

+0

실제로 인덱스가 laymans 용어로 무엇인지를 말하기 위해 여기있는 유일한 사람인 것에 대해 로브가 축하합니다. – CResults

+1

fulltext는 mysql의 MyISAM 스토리지 엔진에서만 사용되는 특수 인덱스로 인간의 구를 사용하여 레코드를 검색하는 데 사용됩니다. mysqls 자신의 검색 엔진과 같은 sql 명령과 같은 고급 버전을 지나치게 자세하게 다루지 않아도됩니다. – studioromeo

0

색인은 선택 쿼리의 속도를 높입니다. 그들은 결과를 얻기 위해 테이블의 모든 단일 행을 점검하고 정보를 찾으려면 어디로 가야하는지 정확하게 구분해야하는 데이터베이스와 다릅니다. 이는 사전 형식 데이터 구조를 반복하는 것과 같은 개념으로, 키 (인덱스)로 원하는 값을 찾는 대신 찾고있는 것을 찾을 수 있습니다. 너무 많은 경우 테이블의 모든 변경이 색인을 작성해야하기 때문에 색인은 삽입, 갱신 및 삭제 속도를 저하시킵니다.

매우 높은 볼륨/고성능 응용 프로그램에서 널리 사용되는 전략은 두 개의 데이터베이스를 갖는 것입니다. 하나는 빠른 검색을 위해 최적으로 인덱싱되고 다른 하나는 빠른 삽입을위한 인덱스가 거의 없습니다. 유일한 문제는 검색 데이터베이스가 삽입 데이터베이스와 아직 동기화되지 않은 경우 실시간 데이터를 잃게된다는 것입니다.

두 가지 종류의 색인도 있습니다. 클러스터형 및 비 클러스터형 인덱스 내가 잘못 본 것이 아니라면 MySQL의 기본 키가 클러스터되고 다른 모든 인덱스는 클러스터되지 않습니다. 차이에 대한 좋은 소개 기사는 here입니다. SQL Server를 다루지 만 그 개념은 동일해야합니다.

MySQL을 많이 사용하지는 않았지만 온라인에서 볼 수있는 것으로부터 FULLTEXT는 자연어 전체 텍스트 검색을 사용하여 검색 할 수있는 방법을 제공합니다. 기본적으로 쿼리에서 전체 텍스트 인덱싱 된 열을 검색하기위한 조건을 제공하고 모든 결과를 끌어 올립니다. 다음은 유용한 주제에서 찾은 몇 가지 기사입니다.
MySQL Docs on Full Text Search

Article 1 Article 2

5

인덱스 두가지 사용된다

  1. 고유 행 (기본 키)를 식별하는 필드 (또는 필드)을 지정

    .
  2. 자주 사용하는 필드를 조회하는 동안 시간을 ​​절약합니다. 예를 들어 사용자 이름으로 사용자를 조회하는 경우 사용자 이름 열에 색인을 추가해야합니다.

색인에 대한 자세한 내용은 http://dev.mysql.com/doc/refman/5.0/en/mysql-indexes.html 이상을 참조하십시오. 데이터베이스 디자인에 대한 적절한 책을 구입하십시오.

두 번째 질문에 대해서는 http://dev.mysql.com/doc/refman/5.0/en/string-type-overview.html을 살펴보십시오.

주된 차이점은 TEXT가 테이블 공간 외부에 저장되고 테이블에서 참조되는 반면 VARCHAR은 일반 필드로 저장된다는 것입니다. 이 경우의 성능은 사용 패턴에 따라 다릅니다. TEXT는 전체 텍스트 검색을 허용 할 수도 있습니다.

또한 위에서 설명한 이유로 TEXT에 인덱스를 사용할 수 없기 때문에 조회 필드로 사용하는 것은 좋지 않습니다.

0

인덱스는 쿼리를 최적화하는 데 사용되는 데이터 구조입니다. 그것들은 개념적으로 책 뒤의 색인과 매우 유사합니다. 새로운 챕터를 추가하기로 결정한 경우 책 색인을 다시 작성해야하는 것처럼 유지 보수에 약간의 공간과 시간이 소요됩니다. 그러나 그들은 종종 쿼리를 엄청나게 빠르게 처리합니다 (최대 수천 또는 수십억 배까지).

1

모든 데이터베이스 테이블에 기본 키가 필요하며 기본 인덱스라고 생각합니다. 인덱스는 쿼리 속도를 높이는 데 사용되며 성능상의 이유로 SQL- 쿼리의 WHERE 부분에서 사용하는 경우 열의 인덱스가 있어야합니다.

불필요한 경우에는 TEXT을 사용하십시오. URL에 색인이 있기 때문에 제목이이고 URL이 인 사용자를 제한하는 것이 좋습니다. 그리고 유형이 TEXT 인 열에 대해서는 색인을 사용할 수 없다고 생각합니다. 나는 FULLTEXT -index에 URL이이라고 생각하지 않습니다.

입문 텍스트 또는 웹 사이트에서 데이터베이스에 관해 읽으시기 바랍니다.

0

모두에게 고유 한 사회 보장 번호 (SSN)가있는 경우 SSN에 따라 모든 사람의 이름 색인을 만들 수 있습니다. 그런 다음 누군가의 SSN을 받았다면 이름을 찾는 것이 정말 빠를 것입니다.

이제 각 사람마다 마닐라 폴더가 있다고 가정합니다. 카드에는 자세한 의료 기록 등이있을 수 있습니다. 데이터베이스가 이러한 카드를 순서대로 보관하지 못할 수도 있습니다. 아마도 컴팩 스의 끝에 새 폴더를 추가 할 수도 있습니다. SSN을 찾으면 관련 폴더가 어디에 보관되는지 정확히 알 수 있도록 정렬 된 "색인"을 유지합니다.

이 예에서 SSN은 기본 키로 사용됩니다. 고유 한 경우 좋지만 고유하지는 않더라도 여전히 속도를 높일 수 있습니다.

16

색인은 책의 색인과 같습니다. 레시피 책이 있다고 가정하고 오믈렛을 만드는 방법을 알고 싶다면 뒤를 건너 뛰고 단어와 페이지 번호를 찾은 다음 그 페이지 번호로 건너 뛰십시오. 이제 색인이없고 400 페이지의 요리법을 검색해야한다고 상상해보십시오. 얼마나 악몽입니까!

인덱스는 여러 종류 기본 키, 인덱스, 고유, 전체 텍스트 주요 지표로 간주됩니다

기본 키는, 처음 MySQL의 레코드를 찾아 간다 있습니다. 대부분의 사람들은 일반적으로 각 행에서 고유하기 때문에 자동 증분 정수 필드를 사용합니다.

색인은 보조 기본 키로 간주되므로이를 빠르게 검색 할 수있는 필드에 배치하십시오.

고유 키는 색인과 유사하지만 해당 열에 중복 항목을 배치 할 수 없도록 보장합니다. 예를 들어 '달걀'이라는 단어를 두 개의 다른 행에 같은 열로 표시 할 수 없습니다.

마지막으로 Fulltext는 mysql의 MyISAM 스토리지 엔진에서만 사용되는 특수 인덱스로 인간의 구를 사용하여 레코드를 검색하는 데 사용됩니다. 너무 많은 세부 사항으로 들어 가지 않고 mysqls는 LIKE sql 명령의 고급 버전 인 검색 엔진을 소유하고 있습니다.

예를 들어 '계란과 버터'를 검색하면 전체 텍스트가 계란, 버터 또는 둘 다를 포함하는 레코드를 검색합니다.좋아하는 사람은 단순히 '달걀과 버터'가 포함 된 문자열을 검색합니다.

이 정보가 도움이 되었기를 바란다면, mysql site은 주제에 대한 충분한 정보를 가지고 있습니다. 그러나이 정보는 일반적인 요지를 제공합니다. 위의 게시물에 추가 코딩 :