SQL의 인덱스 란 무엇입니까?
SQL 의 인덱스 란 무엇입니까 ? 명확하게 이해하기 위해 설명하거나 참조 할 수 있습니까?
인덱스는 어디에서 사용해야합니까?
색인은 데이터베이스에서 검색 속도를 높이는 데 사용됩니다. MySQL은 다른 SQL 서버와 관련하여 주제에 대한 좋은 문서를 가지고 있습니다 : http://dev.mysql.com/doc/refman/5.0/en/mysql-indexes.html
인덱스를 사용하면 쿼리에서 일부 열과 일치하는 모든 행을 효율적으로 찾은 다음 테이블의 해당 하위 집합 만 검색하여 정확히 일치하는 항목을 찾을 수 있습니다. WHERE
절의 열에 인덱스가없는 경우 SQL
서버는 전체 테이블 을 살펴보고 모든 행을 검사하여 일치하는지 확인해야합니다. 이는 큰 테이블에서 느리게 작동 할 수 있습니다.
인덱스는 UNIQUE
인덱스 일 수도 있습니다. 즉, 해당 열에 중복 값을 가질 수 없거나 PRIMARY KEY
일부 스토리지 엔진에서 데이터베이스 파일에서 값이 저장되는 위치를 정의합니다.
MySQL에서는 문장 EXPLAIN
앞에서 SELECT
쿼리가 인덱스를 사용할지 여부를 확인할 수 있습니다. 이것은 성능 문제를 해결하기위한 좋은 시작입니다. 자세한 내용은 여기를 참조하십시오 : http://dev.mysql.com/doc/refman/5.0/en/explain.html
클러스터 된 인덱스는 전화 번호부의 내용과 같습니다. '힐 디치, 데이비드'에서 책을 열고 바로 옆에있는 '힐 디치'에 대한 모든 정보를 찾을 수 있습니다. 클러스터 된 인덱스의 키는 (lastname, firstname)입니다.
이렇게하면 모든 데이터가 나란히 위치하므로 클러스터 된 인덱스는 범위 기반 쿼리를 기반으로 많은 데이터를 검색하는 데 유용합니다.
클러스터형 인덱스는 실제로 데이터가 저장되는 방식과 관련이 있기 때문에 테이블 당 하나만 가능합니다 (여러 개의 클러스터형 인덱스를 시뮬레이트하기 위해 속일 수는 있음).
비 클러스터형 인덱스는 많은 인덱스를 가질 수 있다는 점에서 클러스터형 인덱스의 데이터를 가리 킵니다. 예를 들어 전화 번호부 뒷면에 비 클러스터형 인덱스 (도시, 주소)가있을 수 있습니다
'런던'에 사는 모든 사람들을 위해 전화 번호부를 검색해야한다고 가정 해 봅시다. 클러스터 된 인덱스 만 있으면 클러스터 된 인덱스의 키가 켜져 있기 때문에 전화 번호부의 모든 단일 항목을 검색해야한다고 상상해보십시오. firstname) 그리고 결과적으로 런던에 사는 사람들은 지수 전체에 무작위로 흩어집니다.
(도시)에 비 클러스터형 인덱스가있는 경우 이러한 쿼리를 훨씬 빠르게 수행 할 수 있습니다.
희망이 도움이됩니다!
아주 좋은 비유는 데이터베이스 색인을 책의 색인으로 생각하는 것입니다. 국가에 관한 책을 가지고 있고 인도를 찾고 있다면 왜 책 전체를 넘겨보아야합니까? 데이터베이스 용어의 전체 테이블 스캔과 동등한 것입니다. 인도에서 정보를 찾을 수있는 정확한 페이지를 알려줍니다. 마찬가지로 책 색인에 페이지 번호가 포함되어 있으므로 데이터베이스 색인에는 SQL에서 검색중인 값이 포함 된 행에 대한 포인터가 포함됩니다.
인덱스는 쿼리 성능을 향상시키는 데 사용됩니다. 방문 / 스캔해야하는 데이터베이스 데이터 페이지 수를 줄임으로써이를 수행합니다.
SQL Server에서 클러스터형 인덱스는 테이블의 실제 데이터 순서를 결정합니다. 테이블 당 하나의 클러스터형 인덱스 만있을 수 있습니다 (클러스터형 인덱스는 테이블 임). 테이블의 다른 모든 인덱스는 비 클러스터형이라고합니다.
인덱스는 모두 데이터를 빠르게 찾는 것 입니다.
데이터베이스의 색인은 책에서 찾은 색인과 유사합니다. 책에 색인이 있고 해당 책에서 장을 찾도록 요청하면 색인을 사용하여 해당 장을 빨리 찾을 수 있습니다. 반면에 책에 색인이 없으면 책의 처음부터 끝까지 모든 페이지를보고 장을 찾는 데 더 많은 시간을 소비해야합니다.
비슷한 방식으로 데이터베이스의 인덱스는 쿼리가 데이터를 빠르게 찾는 데 도움이 될 수 있습니다. 색인을 처음 사용하는 경우 다음 비디오가 매우 유용 할 수 있습니다. 사실, 나는 그들로부터 많은 것을 배웠습니다.
인덱스 기본 사항
클러스터형 및 비 클러스터형 인덱스
고유 인덱스 및 비 고유 인덱스 인덱스의
장단점
일반적으로 인덱스는입니다 B-tree
. 클러스터형 인덱스와 비 클러스터형 인덱스의 두 가지 유형이 있습니다.
클러스터형 인덱스는 물리적 인 행 순서를 생성합니다 (하나만 가능하며 대부분의 경우 기본 키이기도 함-테이블에서 기본 키를 생성하는 경우이 테이블에서도 클러스터형 인덱스를 생성 함).
비 클러스터형 인덱스는 이진 트리이지만 물리적 순서의 행을 만들지는 않습니다. 따라서 비 클러스터형 인덱스의 리프 노드에는 PK (있는 경우) 또는 행 인덱스가 포함됩니다.
색인은 검색 속도를 높이는 데 사용됩니다. 복잡성이 O (log N)이기 때문에. 인덱스는 매우 크고 흥미로운 주제입니다. 큰 데이터베이스에서 인덱스를 만드는 것은 때때로 일종의 예술이라고 말할 수 있습니다.
INDEXES
-쉽게 데이터를 찾기 위해
UNIQUE INDEX
-중복 값은 허용되지 않습니다
구문 INDEX
CREATE INDEX INDEX_NAME ON TABLE_NAME(COLUMN);
구문 UNIQUE INDEX
CREATE UNIQUE INDEX INDEX_NAME ON TABLE_NAME(COLUMN);
INDEX는 데이터 검색 프로세스를 가속화하는 성능 최적화 기술입니다. 해당 테이블 (또는 뷰)에서 데이터를 검색하는 동안 성능을 향상시키기 위해 테이블 (또는 뷰)과 연결된 영구 데이터 구조입니다.
쿼리에 WHERE 필터가 포함 된 경우 인덱스 기반 검색이보다 특히 적용됩니다. 그렇지 않으면, 즉 WHERE 필터가없는 쿼리는 전체 데이터와 프로세스를 선택합니다. INDEX없이 전체 테이블을 검색하는 것을 테이블 스캔이라고합니다.
Sql-Indexes에 대한 정확한 정보를 명확하고 신뢰할 수있는 방법으로 찾을 수 있습니다. 다음 링크를 따르십시오.
- 이해를 돕기 위해 : http://dotnetauthorities.blogspot.in/2013/12/Microsoft-SQL-Server-Training-Online-Learning-Classes-INDEX-Overview-and-Optimizations.html
- 구현에 대한 이해 : http://dotnetauthorities.blogspot.in/2013/12/Microsoft-SQL-Server-Training-Online-Learning-Classes-INDEX-Creation-Deletetion-Optimizations.html
먼저 인덱싱없이 정상적인 쿼리 실행 방법을 이해해야합니다. 기본적으로 각 행을 하나씩 순회하며 반환되는 데이터를 찾으면 반환됩니다. 다음 이미지를 참조하십시오. (이 이미지는이 비디오 에서 가져온 것입니다 .)
따라서 query가 50을 찾는다고 가정하면 선형 검색으로 49 개의 레코드를 읽어야합니다.
다음 이미지를 참조하십시오. (이 이미지는이 비디오 에서 가져온 것입니다 )
인덱싱을 적용하면 쿼리는 이진 검색과 같이 각 순회에서 데이터의 절반을 제거하여 각 데이터를 읽지 않고 데이터를 빠르게 찾습니다. mysql 인덱스는 모든 데이터가 리프 노드에있는 B- 트리로 저장됩니다.
인덱스는 여러 가지 이유로 사용됩니다. 가장 큰 이유는 행을 얻거나 행을 더 빨리 정렬 할 수 있도록 쿼리 속도를 높이는 것입니다. 다른 이유는 기본 키 또는 고유 인덱스를 정의하여 다른 열이 동일한 값을 갖지 않도록하는 것입니다.
SQL Server를 사용하는 경우 최고의 리소스 중 하나는 설치와 함께 제공되는 자체 온라인 설명서입니다. 모든 SQL Server 관련 주제에 대해 언급 할 첫 번째 장소입니다.
실용적이라면 "어떻게해야합니까?" 질문이 있으면 StackOverflow가 더 나은 곳입니다.
또한, 나는 잠시 동안 돌아 오지 않았지만 sqlservercentral.com은 SQL Server 관련 사이트 중 최고였습니다.
참고 URL : https://stackoverflow.com/questions/2955459/what-is-an-index-in-sql
'Programing' 카테고리의 다른 글
CSS를 통해 PNG 이미지의 색상을 변경 하시겠습니까? (0) | 2020.02.22 |
---|---|
텍스트 파일 끝에 출력을 추가하는 방법 (0) | 2020.02.22 |
SQL Management Studio에서 다른 포트 번호를 어떻게 지정합니까? (0) | 2020.02.22 |
@Transactional Spring-격리, 전파 (0) | 2020.02.22 |
SQL Server Express 2012에 대한 원격 연결 사용 (0) | 2020.02.22 |