MySql 색인 형식의 요약 및 사용

6283 단어 mysql인덱스
원본 주소:http://www.jb51.net/article/49346.htm
 
색인 은 빠 른 검색 의 관건 이다.MySQL 인덱스 의 구축 은 MySQL 의 효율 적 인 운행 에 매우 중요 하 다.다음은 몇 가지 흔히 볼 수 있 는 MySQL 색인 유형 을 소개 합 니 다.
 
데이터베이스 시트 에서 필드 에 색인 을 만 들 면 조회 속 도 를 크게 높 일 수 있다.만약 우리 가 my table 표를 만 들 었 다 면:
 
CREATE TABLE mytable(   ID INT NOT NULL,    username VARCHAR(16) NOT NULL  );

 우 리 는 무 작위 로 10000 개의 기록 을 삽입 했다. 그 중 하 나 는 5555, admin 이다.
 
username = "admin" 의 기록 찾기 SELECT * FROM my table WHERE username = "admin";사용자 name 에 색인 이 만 들 어 졌 다 면 MySQL 은 스 캔 하지 않 아 도 이 기록 을 정확하게 찾 을 수 있 습 니 다.반면 MySQL 은 10000 개의 기록 을 조회 하 는 모든 기록 을 검색 합 니 다.
색인 은 단일 색인 과 조합 색인 으로 나 뉜 다.단일 색인, 즉 하나의 색인 은 하나의 열 만 포함 하고 하나의 표 는 여러 개의 단일 색인 을 가 질 수 있 지만 이것 은 조합 색인 이 아니다.조합 색인, 즉 하나의 색인 은 여러 열 을 포함 합 니 다.
 
MySQL 색인 형식 은 다음 과 같 습 니 다.
일반 색인
이것 은 가장 기본 적 인 색인 으로 아무런 제한 이 없다.다음 과 같은 몇 가지 생 성 방식 이 있 습 니 다.
1. 색인 만 들 기
 
CREATE INDEX indexName ON mytable(username(length));

 CHAR, VARCHAR 유형 이 라면 length 는 필드 의 실제 길이 보다 작 을 수 있 습 니 다.BLOB 와 TEXT 타 입 이 라면 length, 아래 를 지정 해 야 합 니 다.
 
2. 표 구조 수정
 
ALTER mytable ADD INDEX [indexName] ON (username(length)) --           
CREATE TABLE mytable(   ID INT NOT NULL,    username VARCHAR(16) NOT NULL,   INDEX [indexName] (username(length))   ); 
--        :
DROP INDEX [indexName] ON mytable;

 유일한 색인
 
이것 은 앞의 일반 색인 과 유사 합 니 다. 다른 것 은 색인 열의 값 은 유일 해 야 하지만 빈 값 은 허용 합 니 다.조합 색인 이 라면 열 값 의 조합 이 유일 해 야 합 니 다.다음 과 같은 몇 가지 생 성 방식 이 있 습 니 다.
 
CREATE UNIQUE INDEX indexName ON mytable(username(length)) 
--      
ALTER mytable ADD UNIQUE [indexName] ON (username(length)) 
--           
CREATE TABLE mytable(   ID INT NOT NULL,    username VARCHAR(16) NOT NULL,   UNIQUE [indexName] (username(length))   );

 주 키 인덱스
 
그것 은 빈 값 을 허용 하지 않 는 특수 한 유일한 색인 이다.보통 표를 만 들 때 메 인 키 색인 을 동시에 만 듭 니 다.
 
CREATE TABLE mytable(   ID INT NOT NULL,    username VARCHAR(16) NOT NULL,   PRIMARY KEY(ID)   );

 물론 ALTER 명령 으로 도기억 하기: 시계 하나 에 메 인 키 만 있 을 수 있 습 니 다.
 
조합 색인
단일 색인 과 조합 색인 을 이미지 적 으로 비교 하기 위해 표 에 여러 필드 를 추가 합 니 다.
 
CREATE TABLE mytable(   ID INT NOT NULL,    username VARCHAR(16) NOT NULL,   city VARCHAR(50) NOT NULL,   age INT NOT NULL  ); 

 시 계 를 만 들 때 usernname 길 이 는 16 이 고 여 기 는 10 을 사용 합 니 다.이 는 일반적인 경우 이름 길이 가 10 을 넘 지 않 아 색인 조회 속도 가 빨 라 지고 색인 파일 크기 도 줄 여 INSERT 업데이트 속 도 를 높 일 수 있 기 때문이다.
 
usernname, city, age 에 각각 단일 색인 을 만 들 면 이 표 에 3 개의 단일 색인 이 있 고 조회 할 때 상기 조합 색인 효율 도 크게 다 르 며 우리 의 조합 색인 보다 훨씬 낮 습 니 다.이 때 세 개의 색인 이 있 었 지만 MySQL 은 가장 효율 적 인 단일 색인 이 라 고 생각 하 는 것 만 사용 할 수 있 습 니 다.
이러한 조합 색인 을 만 드 는 것 은 다음 세 그룹의 조합 색인 을 각각 만 드 는 것 과 같다.
usernname,city,age   usernname,city   usernname  왜 city, age 같은 조합 색인 이 없 습 니까?MySQL 조합 색인 '맨 왼쪽 접두사' 의 결과 다.간단 한 이 해 는 맨 왼쪽 부터 조합 하 는 것 이다.이 세 열 을 포함 하 는 조회 만 이 조합 색인 을 사용 하 는 것 이 아니 라 아래 의 몇 개의 SQL 은 이 조합 색인 을 사용 합 니 다.
SELECT * FROM mytable WHREE username="admin" AND city="  "  SELECT * FROM mytable WHREE username="admin"

 다음 몇 개 는 사용 하지 않 습 니 다.
SELECT * FROM mytable WHREE age=20 AND city="  "  SELECT * FROM mytable WHREE city="  "

 5. 색인 을 만 드 는 시기
여기까지 우 리 는 색인 을 만 드 는 것 을 배 웠 습 니 다. 그러면 우 리 는 어떤 상황 에서 색인 을 만들어 야 합 니까?일반적으로 WHERE 와 JOIN 에 나타 나 는 열 은 색인 을 만들어 야 하지만 완전히 그렇지 는 않 습 니 다. MySQL 은 <, < =, =, >, =, BETWEEN, IN, 그리고 가끔 LIKE 에 만 색인 을 사용 하기 때 문 입 니 다.예 를 들 면:
SELECT t.Name  FROM mytable t LEFT JOIN mytable m    ON t.Name=m.username WHERE m.age=20 AND m.city='  '

 이 때 는 city 와 age 에 색인 을 만들어 야 합 니 다. my table 표 의 userame 도 JOIN 자구 에 나타 나 기 때문에 색인 을 만 들 필요 가 있 습 니 다.
아까 말씀 드 렸 듯 이 LIKE 는 색인 을 만들어 야 합 니 다.어댑터% 와검색 을 시작 할 때 MySQL 은 색인 을 사용 하지 않 습 니 다.예 를 들 어 다음 문장 은 색인 을 사용 합 니 다.
SELECT * FROM mytable WHERE username like'admin%'

 다음 문장 은 사용 하지 않 는 다. 다음 문장 은 사용 하지 않 는 다.
SELECT * FROM mytable WHEREt Name like'%admin'

 따라서 LIKE 를 사용 할 때 이상 의 차 이 를 주의해 야 한다.
 
6. 색인 의 부족 한 점
위 에 서 는 색인 을 사용 하 는 것 이 좋다 고 말 하고 있 지만, 색인 을 너무 많이 사용 하면 남용 된다.따라서 색인 도 단점 이 있 습 니 다.
1. 색인 은 조회 속 도 를 크게 향상 시 키 는 동시에 업데이트 표 의 속 도 를 낮 출 수 있 습 니 다. 예 를 들 어 표 에 대해 INSERT, UPDATE 와 DELETE 를 진행 합 니 다.표를 업데이트 할 때 MySQL 은 데 이 터 를 저장 해 야 할 뿐만 아니 라 색인 파일 도 저장 해 야 하기 때문이다.
2. 색인 을 만 들 면 디스크 공간 을 차지 하 는 색인 파일 입 니 다.일반적으로 이 문 제 는 그다지 심각 하지 않 지만, 큰 표 에 여러 가지 조합 색인 을 만 들 면 색인 파일 의 팽창 이 매우 빠르다.
색인 은 효율 을 높이 는 한 요소 일 뿐 입 니 다. 만약 에 MySQL 에 빅 데이터 양의 표 가 있다 면 가장 우수한 색인 을 만 들 거나 검색 어 를 최적화 하 는 데 시간 이 걸 립 니 다.
 
7. 색인 사용 주의사항
색인 을 사용 할 때 다음 과 같은 기술 과 주의사항 이 있 습 니 다.
1. 인덱스 는 NULL 값 이 있 는 열 을 포함 하지 않 습 니 다.
열 에 NULL 값 이 포함 되 어 있 으 면 색인 에 포함 되 지 않 습 니 다. 복합 색인 에 NULL 값 이 포함 되 어 있 으 면 이 열 은 이 복합 색인 에 유효 하지 않 습 니 다.그래서 우 리 는 데이터 베 이 스 를 디자인 할 때 필드 의 기본 값 을 NULL 로 하지 않 습 니 다.
2. 짧 은 색인 사용
직렬 을 인덱스 합 니 다. 접두사 길 이 를 지정 해 야 할 수도 있 습 니 다.예 를 들 어 CHAR (255) 열 이 있 으 면 10 글자 나 20 글자 안에 다 중 수치 가 유일 하 다 면 전체 열 을 색인 하지 마 십시오.짧 은 색인 은 조회 속 도 를 높 일 뿐만 아니 라 디스크 공간 과 I / O 작업 도 절약 할 수 있다.
3. 색인 열 정렬
MySQL 조 회 는 하나의 색인 만 사용 하기 때문에 where 자구 에 색인 이 사용 되 었 다 면 orderby 의 열 은 색인 을 사용 하지 않 습 니 다.따라서 데이터베이스 기본 정렬 이 요구 에 부합 되 는 경우 정렬 작업 을 사용 하지 마 십시오.가능 한 한 여러 열의 정렬 을 포함 하지 마 십시오. 필요 하 다 면 이 열 에 복합 색인 을 만 드 는 것 이 좋 습 니 다.
4. like 구문 조작
일반적으로 like 조작 을 권장 하지 않 으 며, 사용 하지 않 으 면 안 되 며, 어떻게 사용 하 느 냐 도 문제 다.like "% aa%" 는 색인 을 사용 하지 않 고 like "aa%" 는 색인 을 사용 할 수 있 습 니 다.
5. 열 에서 연산 하지 마 세 요
select * from users where YEAR(adddate)<2007;

 각 줄 에서 연산 을 진행 합 니 다. 이것 은 색인 이 효력 을 잃 고 전체 표 스 캔 을 진행 할 것 입 니 다. 따라서 우 리 는 다음 과 같이 변경 할 수 있 습 니 다.
select * from users where adddate<‘2007-01-01';

 6. NOT IN 과 < > 동작 을 사용 하지 않 음
이 가운데 MySQL 색인 유형 에 대해 소개 했다.모두 에 게 도움 이 되 기 를 바 랍 니 다.

좋은 웹페이지 즐겨찾기