>  기사  >  데이터 베이스  >  SQL 데이터 작업의 기초(중급) 6

SQL 데이터 작업의 기초(중급) 6

黄舟
黄舟원래의
2016-12-17 14:33:41922검색

10장 "SQL 기초"에서는 SQL에 대한 예비 소개를 제공합니다. SELECT 문을 사용하여 쿼리하는 방법과 자신만의 테이블을 만드는 방법도 배웠습니다. 이 장에서는 SQL에 대한 지식을 심화시키게 됩니다. 쿼리 속도를 높이기 위해 인덱스를 만드는 방법을 알아봅니다. 또한 더 많은 SQL 문과 함수를 사용하여 테이블의 데이터를 조작하는 방법도 배웁니다.

색인 만들기

이 책에서 특정 문장을 찾고 싶다고 가정해 보세요. 페이지별로 검색할 수 있지만 시간이 많이 걸립니다. 그리고 이 책의 색인을 활용하면 원하는 주제를 빠르게 찾을 수 있습니다.

표의 색인은 책 뒷면에 붙어 있는 색인과 매우 유사합니다. 쿼리 속도를 크게 향상시킬 수 있습니다. 더 큰 테이블의 경우 인덱스를 추가하면 일반적으로 완료하는 데 몇 시간이 걸리는 쿼리를 단 몇 분 만에 완료할 수 있습니다. 따라서 빈번한 쿼리가 필요한 테이블에는 인덱스를 추가할 이유가 없습니다.

참고:

메모리 용량이나 하드 디스크 공간이 부족한 경우 테이블에 인덱스를 추가하고 싶지 않을 수 있습니다. 인덱스가 포함된 데이터베이스의 경우 SQL 서버에는 상당한 양의 추가 공간이 필요합니다. 예를 들어 클러스터형 인덱스를 생성하려면 약 1.2배의 데이터 크기가 필요합니다. 데이터베이스에서 테이블 인덱스가 차지하는 공간을 확인하려면 시스템 저장 프로시저 sp_spaceused를 사용하여 개체 이름을 인덱스되는 테이블의 이름으로 지정하면 됩니다.

클러스터형 인덱스와 비클러스터형 인덱스

이 책의 인덱스를 통해 문장의 페이지 번호를 찾았다고 가정해 보겠습니다. 페이지 번호를 알고 나면 올바른 페이지 번호를 찾을 때까지 책을 탐색할 가능성이 높습니다. 무작위로 검색하면 결국 올바른 페이지 번호에 도달할 수 있습니다. 그러나 페이지 번호를 찾는 더 효율적인 방법이 있습니다.

먼저, 찾고 있는 페이지가 절반 정도 페이지 수보다 작다면, 책을 1/4로 돌려보세요. 세 번째 장소. 이렇게 하면 올바른 페이지 번호에 가까워질 때까지 책을 더 작은 부분으로 계속 나눌 수 있습니다. 이는 페이지를 찾는 매우 효과적인 방법입니다.

SQL Sever의 테이블 인덱스도 비슷한 방식으로 작동합니다. 테이블 인덱스는 트리 구조를 형성하는 페이지 집합으로 구성됩니다. 루트 페이지는 다른 두 페이지를 가리켜 테이블의 레코드를 논리적으로 두 부분으로 나눕니다. 루트 페이지가 가리키는 두 페이지는 레코드를 더 작은 부분으로 나눕니다. 각 페이지는 리프 수준 페이지에 도달할 때까지 레코드를 더 작은 파티션으로 나눕니다.

인덱스에는 클러스터형 인덱스와 비클러스터형 인덱스의 두 가지 유형이 있습니다. 클러스터형 인덱스에서 인덱스 트리의 리프 수준 페이지에는 실제 데이터가 포함됩니다. 레코드의 인덱스 순서는 물리적 순서와 동일합니다. 비클러스터형 인덱스에서 리프 수준 페이지는 테이블의 레코드를 가리킵니다. 즉, 레코드의 물리적 순서가 반드시 논리적 순서와 관련이 있는 것은 아닙니다.

클러스터형 인덱스는 목차와 매우 유사하며, 목차의 순서는 실제 페이지 번호 순서와 일치합니다. 비클러스터형 인덱스는 책의 표준 인덱스 테이블과 비슷합니다. 인덱스 테이블의 순서는 일반적으로 실제 페이지 번호 순서와 일치하지 않습니다. 책에는 여러 개의 색인이 있을 수 있습니다. 예를 들어 주제 색인과 저자 색인이 모두 있을 수 있습니다. 마찬가지로 테이블에는 여러 개의 비클러스터형 인덱스가 있을 수 있습니다.

일반적으로 클러스터형 인덱스를 사용하지만 두 가지 인덱스 유형의 장단점을 이해하고 있어야 합니다.

테이블의 레코드는 하나의 물리적 순서로만 저장될 수 있으므로 각 테이블에는 하나의 클러스터형 인덱스만 있을 수 있습니다. 일반적으로 식별 필드를 기반으로 테이블에 클러스터형 인덱스를 생성하려고 합니다. 그러나 문자, 숫자, 날짜/시간 필드 등 다른 유형의 필드에 클러스터형 인덱스를 생성할 수도 있습니다.

클러스터형 인덱스가 있는 테이블에서 데이터를 검색하는 것은 비클러스터형 인덱스가 있는 테이블보다 빠릅니다. 특정 범위 내의 데이터를 검색해야 하는 경우에는 비클러스터형 인덱스보다 클러스터형 인덱스를 사용하는 것이 좋습니다. 예를 들어, 테이블을 사용하여 사이트 방문자 활동을 기록한다고 가정해 보겠습니다. 일정 시간 내에 로그인 정보를 조회하고 싶다면 이 테이블의 DATETIME 유형 필드에 클러스터형 인덱스를 생성해야 합니다.

클러스터형 인덱스의 주요 제한 사항은 테이블당 하나의 클러스터형 인덱스만 생성할 수 있다는 것입니다. 그러나 테이블에는 둘 이상의 비클러스터형 인덱스가 있을 수 있습니다. 실제로 테이블당 최대 249개의 비클러스터형 인덱스를 생성할 수 있습니다. 테이블에 클러스터형 인덱스와 비클러스터형 인덱스를 동시에 생성할 수도 있습니다.

날짜뿐만 아니라 사용자 이름을 기준으로 사이트 활동 로그의 데이터를 가져오고 싶다고 가정해 보겠습니다. 이 경우 클러스터형 인덱스와 비클러스터형 인덱스를 동시에 생성하는 것이 효과적입니다. 날짜/시간 필드에 클러스터형 인덱스를 생성하고 사용자 이름 필드에 비클러스터형 인덱스를 생성할 수 있습니다. 더 많은 인덱싱 방법이 필요하다고 판단되면 비클러스터형 인덱스를 더 추가할 수 있습니다.

비클러스터형 인덱스에는 많은 양의 하드 디스크 공간과 메모리가 필요합니다. 또한 비클러스터형 인덱스를 사용하면 또한 테이블에 데이터를 삽입하고 업데이트하는 속도도 줄어듭니다. 비클러스터형 인덱스가 있는 테이블의 데이터를 변경할 때마다 인덱스도 업데이트해야 합니다. 따라서 테이블에 비클러스터형 인덱스를 생성할 때는 신중하게 고려해야 합니다. 테이블에서 데이터를 자주 업데이트해야 할 것으로 예상되는 경우 테이블에 비클러스터형 인덱스를 너무 많이 만들지 마세요. 또한 하드 디스크와 메모리 공간이 제한되어 있는 경우에는 사용되는 비클러스터형 인덱스 수도 제한해야 합니다.

인덱스 속성

두 가지 유형의 인덱스에는 두 가지 중요한 속성이 있습니다. 두 유형 중 하나를 사용하여 동시에 여러 필드를 인덱싱할 수 있습니다(복합 인덱스). 모든 유형의 인덱스는 고유하게 지정할 수 있습니다. 인덱스.

여러 필드에 대한 복합 인덱스를 생성하거나 복합 클러스터형 인덱스를 생성할 수도 있습니다. 웹 사이트 방문자의 이름과 성을 기록하는 테이블이 있다고 가정합니다. 전체 이름을 기반으로 테이블에서 데이터를 가져오려면 성 필드와 이름 필드 모두에 인덱스를 생성해야 합니다. 이는 두 필드에 별도의 인덱스를 생성하는 것과 다릅니다. 동시에 두 개 이상의 필드를 쿼리하려면 여러 필드에 대한 인덱스를 만들어야 합니다. 각 필드를 개별적으로 쿼리하려면 각 필드에 대해 독립적인 인덱스를 만들어야 합니다.

두 유형의 인덱스 모두 고유 인덱스로 지정할 수 있습니다. 필드가 고유하게 색인화되면 해당 필드에 중복된 값을 입력할 수 없습니다. 식별 필드는 자동으로 고유 값 필드가 되지만 다른 유형의 필드에 고유 인덱스를 생성할 수도 있습니다. 사이트의 사용자 비밀번호를 저장하기 위해 테이블을 사용한다고 가정해 보겠습니다. 두 명의 사용자가 동일한 비밀번호를 갖는 것을 원하지 않을 것입니다. 필드를 고유한 값 필드로 지정하면 이러한 일이 발생하지 않도록 방지할 수 있습니다.


위는 SQL 데이터 연산 기초(중급) 내용입니다. 6. 더 많은 관련 글은 PHP 중국어 홈페이지(www.php.cn)를 참고해주세요. !


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.