SQL에서 인덱스란 무엇입니까?
또한, 언제 사용하는 것이 적절한가요?
색인은 데이터베이스에서 검색 속도를 높이는 데 사용됩니다.MySQL에는 이 주제에 대한 몇 가지 좋은 문서가 있습니다(다른 SQL 서버에도 관련이 있음). http://dev.mysql.com/doc/refman/5.0/en/mysql-indexes.html
인덱스를 사용하여 쿼리의 일부 열과 일치하는 모든 행을 효율적으로 찾은 다음 테이블의 해당 하위 집합만 사용하여 정확한 일치 항목을 찾을 수 있습니다.인 없경우의 어느 없는 WHERE
절, 그SQL
서버는 전체 테이블을 살펴보고 모든 행이 일치하는지 확인해야 하는데, 이는 큰 테이블에서는 느린 작업일 수 있습니다.
인덱스는 다음과 같을 수도 있습니다.UNIQUE
즉, 된 값을 수 을 의미합니다. 즉덱, 열해중된값을복가질수없다습니에당스인▁index.PRIMARY KEY
일부 스토리지 엔진에서는 데이터베이스 파일에서 값이 저장되는 위치를 정의합니다.
에서는 MySQL을 할 수 .EXPLAIN
의 앞서에 에서.SELECT
쿼리에서 인덱스를 사용할지 여부를 확인하는 문입니다.이것은 성능 문제를 해결하기 위한 좋은 시작입니다.여기서 더 읽기: http://dev.mysql.com/doc/refman/5.0/en/explain.html
군집화된 색인은 전화번호부의 내용과 같습니다.여러분은 'Hilditch, David'에서 책을 열고 바로 옆에 있는 모든 'Hilditch'에 대한 모든 정보를 찾을 수 있습니다.여기서 클러스터된 인덱스의 키는 (성, 이름)입니다.
따라서 클러스터된 인덱스는 모든 데이터가 서로 인접하므로 범위 기반 쿼리를 기반으로 많은 데이터를 검색하는 데 유용합니다.
클러스터된 인덱스는 실제로 데이터가 저장되는 방식과 관련되므로 테이블당 하나만 가능합니다(단, 여러 클러스터된 인덱스를 시뮬레이트하도록 커닝할 수 있음).
비클러스터형 인덱스는 대부분의 인덱스를 가질 수 있으며 클러스터된 인덱스의 데이터를 가리킬 수 있다는 점에서 다릅니다.전화번호부 뒤에 키를 누른 비클러스터형 색인(시내, 주소)이 있을 수 있습니다.
만약 당신이 '런던'에 사는 모든 사람들을 위해 전화번호부를 검색해야 한다고 상상해 보세요 - 클러스터화된 색인만 가지고 당신은 전화번호부의 모든 항목을 검색해야 할 것입니다. 왜냐하면 클러스터화된 색인의 키는 (성, 이름)에 있기 때문이고 결과적으로 런던에 사는 사람들은 색인 전체에 무작위로 흩어져 있기 때문입니다.
(타운)에 비클러스터된 인덱스가 있는 경우 이러한 쿼리를 훨씬 빠르게 수행할 수 있습니다.
인덱스는 쿼리의 성능을 향상시키는 데 사용됩니다.방문/검색해야 하는 데이터베이스 데이터 페이지 수를 줄임으로써 이 작업을 수행합니다.
SQL 서버에서 클러스터된 인덱스는 테이블의 실제 데이터 순서를 결정합니다.테이블당 하나의 클러스터된 인덱스만 있을 수 있습니다(클러스터된 인덱스가 테이블입니다).테이블의 다른 모든 인덱스는 비클러스터된 인덱스라고 합니다.
인덱스는 데이터를 신속하게 찾는 것입니다.
데이터베이스의 색인은 책에서 찾은 색인과 유사합니다.책에 색인이 있는데, 그 책의 한 장을 찾으라고 하면, 색인의 도움을 받아 빠르게 찾을 수 있습니다.반면 책에 색인이 없다면 책의 시작부터 끝까지 모든 페이지를 보면서 챕터를 찾는 데 더 많은 시간을 할애해야 할 것입니다.
유사한 방법으로 데이터베이스의 인덱스를 사용하면 쿼리가 데이터를 빠르게 찾을 수 있습니다.인덱스를 처음 사용하는 경우 다음 비디오가 매우 유용할 수 있습니다.사실, 저는 그들로부터 많은 것을 배웠습니다.
색인 기본 사항
클러스터된 인덱스 및 비클러스터된 인덱스
고유 인덱스 및 고유하지 않은 인덱스
지수의 장단점
는 음일인지는수입니다.B-tree
인덱스에는 클러스터링된 인덱스와 비클러스터된 인덱스의 두 가지 유형이 있습니다.
클러스터된 인덱스는 행의 물리적 순서를 만듭니다(하나만 사용할 수 있으며 대부분의 경우 기본 키이기도 합니다. 테이블에 기본 키를 만들면 이 테이블에도 클러스터된 인덱스를 만듭니다).
비클러스터형 인덱스도 이진 트리이지만 실제 행 순서는 만들지 않습니다.따라서 비클러스터형 인덱스의 리프 노드에는 PK(존재하는 경우) 또는 행 인덱스가 포함됩니다.
인덱스는 검색 속도를 높이는 데 사용됩니다.복잡도가 O(로그 N)이기 때문입니다.색인은 매우 크고 흥미로운 주제입니다.대규모 데이터베이스에 인덱스를 만드는 것은 때때로 일종의 예술이라고 말할 수 있습니다.
INDEXES
를 쉽게 것
UNIQUE INDEX
은 허용되지 않습니다.
에 대한 :INDEX
CREATE INDEX INDEX_NAME ON TABLE_NAME(COLUMN);
에 대한 :UNIQUE INDEX
CREATE UNIQUE INDEX INDEX_NAME ON TABLE_NAME(COLUMN);
먼저 인덱싱 없이 정상적으로 쿼리가 실행되는 방식을 이해해야 합니다.기본적으로 각 행을 하나씩 이동하고 데이터를 찾으면 반환합니다.다음 이미지를 참조하십시오.(이 이미지는 이 비디오에서 가져온 것입니다.)
따라서 쿼리가 50개를 찾는다고 가정하면, 49개의 레코드를 선형 검색으로 읽어야 합니다.
다음 이미지를 참조하십시오.(이 이미지는 이 비디오에서 가져온 것입니다)
인덱싱을 적용할 때 쿼리는 이진 검색처럼 각 트래버설에서 데이터의 절반을 제거하는 것만으로 각 데이터를 읽지 않고 빠르게 데이터를 찾습니다.mysql 인덱스는 모든 데이터가 리프 노드에 있는 B-트리로 저장됩니다.
INDEX는 데이터 검색 프로세스를 가속화하는 성능 최적화 기술입니다.테이블(또는 보기)에서 데이터를 검색하는 동안 성능을 향상시키기 위해 테이블(또는 보기)과 연결된 영구 데이터 구조입니다.
인덱스 기반 검색은 특히 쿼리에 WHERE 필터가 포함된 경우에 적용됩니다.그렇지 않으면 WHERE 필터가 없는 쿼리가 전체 데이터 및 프로세스를 선택합니다.INDEX 없이 전체 테이블을 검색하는 것을 Table-scan이라고 합니다.
SQL-Index에 대한 정확한 정보를 명확하고 신뢰할 수 있는 방법으로 확인할 수 있습니다. 다음 링크를 따르십시오.
- 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 .
SQL Server를 사용하는 경우 가장 좋은 리소스 중 하나는 설치와 함께 제공되는 자체 Books Online입니다!SQL Server 관련 주제에 대해 제가 처음으로 언급하고 싶은 곳입니다.
"어떻게 해야 할까요?"라는 질문이 현실적이라면 StackOverflow가 더 나은 질문이 될 것입니다.
또한 저는 한동안 돌아오지 않았지만 sqlservercentral.com 은 SQL Server와 관련된 최고의 사이트 중 하나입니다.
인덱스는 몇 가지 다른 이유로 사용됩니다.주요 이유는 쿼리 속도를 높여 행을 더 빨리 가져오거나 정렬할 수 있기 때문입니다.다른 이유는 다른 열이 동일한 값을 갖지 않도록 보장하는 기본 키 또는 고유 인덱스를 정의하는 것입니다.
그렇다면 인덱싱은 실제로 어떻게 작동할까요?
먼저, 쿼리 성능을 최적화하기 위해 열에 인덱스를 배치할 때 데이터베이스 테이블이 자동으로 정렬되지 않습니다.
An index is a data structure, (most commonly its B-tree {Its balanced tree, not binary tree}) that stores the value for a specific column in a table.
B-트리의 주요 장점은 데이터를 정렬할 수 있다는 것입니다.이와 함께, B-Tree 데이터 구조는 시간 효율적이며, 검색, 삽입, 삭제 등의 작업을 로그 시간 내에 수행할 수 있습니다.
그래서 지수는 다음과 같이 보일 것입니다.
여기서 각 열에 대해 행의 정확한 위치를 가리키는 데이터베이스 내부 식별자(포인터)로 매핑됩니다.이제 동일한 쿼리를 실행합니다.
쿼리 실행의 시각적 표현
따라서 인덱싱은 시간 복잡성을 o(n)에서 o(log n)로 줄여줍니다.
자세한 정보 - https://pankajtanwar.in/blog/what-is-the-sorting-algorithm-behind-order-by-query-in-mysql
INDEX는 SQL의 일부가 아닙니다. INDEX는 CRUD를 가속하기 위해 물리적 수준에서 균형 트리를 만듭니다.
SQL은 개념 수준 스키마와 외부 수준 스키마를 설명하는 언어입니다. SQL은 물리적 수준 스키마를 설명하지 않습니다.
INDEX를 생성하는 문은 SQL 표준이 아닌 DBMS에 의해 정의됩니다.
인덱스는on-disk structure associated with a table or view that speeds retrieval of rows from the table or view
인덱스에는 테이블 또는 보기의 하나 이상의 열에서 작성된 키가 포함됩니다.이러한 키는 SQL Server가 키 값과 연결된 행을 빠르고 효율적으로 찾을 수 있는 구조(B-tree)에 저장됩니다.
Indexes are automatically created when PRIMARY KEY and UNIQUE constraints are defined on table columns. For example, when you create a table with a UNIQUE constraint, Database Engine automatically creates a nonclustered index.
기본 키를 구성하는 경우, 데이터베이스 엔진은 클러스터된 인덱스가 이미 존재하지 않는 한 자동으로 클러스터된 인덱스를 생성합니다.기존 테이블에 기본 키 제약 조건을 적용하려고 할 때 해당 테이블에 클러스터된 인덱스가 이미 있으면 SQL Server는 비클러스터된 인덱스를 사용하여 기본 키를 적용합니다.
인덱스(클러스터 및 비클러스터)에 대한 자세한 내용은 다음을 참조하십시오. https://learn.microsoft.com/en-us/sql/relational-databases/indexes/clustered-and-nonclustered-indexes-described?view=sql-server-ver15
이것이 도움이 되길 바랍니다!
언급URL : https://stackoverflow.com/questions/2955459/what-is-an-index-in-sql
'programing' 카테고리의 다른 글
C에서 ((c) + 1)의 유형은 무엇입니까? (0) | 2023.06.07 |
---|---|
Windows에서 동시에 실행할 수 있는 스레드 수는 몇 개입니까? (0) | 2023.06.02 |
용량이 아닌 특정 크기로 목록을 초기화하는 방법 (0) | 2023.06.02 |
루비에서 지도와 수집의 차이점은 무엇입니까? (0) | 2023.06.02 |
Angular HttpClient에 HTTP 헤더를 추가해도 헤더가 전송되지 않습니다. 왜죠? (0) | 2023.06.02 |