2010-11-04 19 views
19

Trong tài liệu cho nhiều ORM khác nhau, chúng luôn cung cấp cách tạo chỉ mục, v.v. Chúng luôn đề cập đến việc tạo các chỉ mục thích hợp cho hiệu quả, như thể đó là kiến ​​thức vốn có đối với một SQLer không viết tay, những người cần sử dụng ORM. Sự hiểu biết của tôi về các chỉ mục (bên ngoài PK) về cơ bản là: Nếu bạn định làm LIKE truy vấn (ví dụ, tìm kiếm) dựa trên nội dung của một cột, bạn nên sử dụng chỉ mục văn bản đầy đủ cho cột đó. Tôi nên biết điều gì khác liên quan đến các chỉ mục (chủ yếu liên quan đến hiệu quả)? Tôi cảm thấy như có một thế giới kiến ​​thức ở bước cửa của tôi, nhưng có một miếng đệm chuột lớn bị kẹt dưới nó, vì vậy tôi không thể vượt qua (Tôi không biết tại sao tôi cảm thấy như tôi cần phải nói điều đó, nhưng cảm ơn vì đã cung cấp chiếc ghế dài).Làm cách nào để biết khi nào lập chỉ mục một cột và với nội dung nào?

Trả lời

21

Hãy suy nghĩ về một chỉ số rất gần như chỉ mục ở mặt sau của một cuốn sách. Đó là một khu vực hoàn toàn tách biệt với nội dung của cuốn sách, nếu bạn đang tìm kiếm một số giá trị cụ thể, bạn có thể đi đến chỉ mục và tìm kiếm nó (chỉ mục được sắp xếp, vì vậy việc tìm kiếm mọi thứ nhanh hơn rất nhiều so với quét từng trang của cuốn sách).

Mục nhập chỉ mục có số trang, vì vậy bạn có thể nhanh chóng truy cập trang tìm kiếm chủ đề của mình. Một chỉ số cơ sở dữ liệu rất giống nhau; nó là một danh sách có thứ tự các thông tin liên quan trong cơ sở dữ liệu của bạn (các trường được bao gồm trong chỉ mục), với thông tin cho cơ sở dữ liệu để tìm các hồ sơ phù hợp.

Vì vậy, ... bạn sẽ tạo chỉ mục khi bạn có thông tin mà bạn cần tìm kiếm thường xuyên. Các chỉ mục bình thường không giúp bạn tìm kiếm 'một phần' như truy vấn LIKE, nhưng bất cứ khi nào bạn cần để có được một tập hợp kết quả mà trường X có giá trị nhất định, chúng giữ cho DBMS không cần phải 'quét' toàn bộ bảng , tìm kiếm các giá trị phù hợp.

Chúng cũng giúp bạn khi bạn cần sắp xếp trên một cột.

Một điều khác cần lưu ý; Nếu DBMS cho phép bạn tạo các chỉ mục duy nhất có nhiều trường, hãy chắc chắn điều tra các tác động của việc làm như vậy, cụ thể đối với DBMS của bạn. Một chỉ mục bao gồm nhiều trường có thể chỉ hoàn toàn (hoặc ở tất cả) hữu ích nếu tất cả các trường đó đang được sử dụng trong một truy vấn. Ngược lại, có nhiều chỉ mục cho một bảng, với một trường cho mỗi chỉ mục, có thể không được nhiều (hoặc bất kỳ) trợ giúp cho các truy vấn đang lọc/sắp xếp theo nhiều trường.


Bạn đã đề cập đến chỉ mục Toàn văn bản và PK (Khóa chính). Chúng khác với các chỉ mục thông thường, mặc dù chúng thường phục vụ các mục đích tương tự.

Trước tiên, lưu ý rằng Khóa chính thường là một chỉ mục (trong MSSQL, 'Chỉ số nhóm', trên thực tế), nhưng điều này không nhất thiết phải là trường hợp cụ thể. Ví dụ, một MSSQL PK là một Clustered Index theo mặc định; các chỉ mục nhóm được đặc biệt ở chỗ chúng không phải là một bit dữ liệu riêng biệt được lưu trữ ở nơi khác, nhưng chính dữ liệu được sắp xếp trong bảng theo thứ tự của chỉ mục Clustered. Đây là lý do tại sao một PK phổ biến là một giá trị int được tạo tự động với các giá trị gia tăng tuần tự. Vì vậy, chỉ mục Clustered Index sắp xếp dữ liệu trong bảng cụ thể theo giá trị của trường. So sánh điều này với một từ điển truyền thống; các mục tự được sắp xếp theo 'khóa', là từ được xác định.

Nhưng trong MSSQL (kiểm tra tài liệu DBMS để biết thông tin của bạn), bạn có thể thay đổi Chỉ mục được nhóm thành một trường khác, nếu bạn muốn. Đôi khi việc này được thực hiện trên các trường dựa trên datetime.


Chỉ mục văn bản đầy đủ là các loại thú khác nhau hoàn toàn. Họ sử dụng một số nguyên tắc tương tự, nhưng những gì họ đang làm là không chính xác giống như các chỉ mục bình thường, mà tôi mô tả. Ngoài ra: trong một số DBMS, các truy vấn LIKE làm không sử dụng chỉ mục văn bản đầy đủ; các toán tử truy vấn đặc biệt được yêu cầu.

Các chỉ mục này khác nhau vì mục đích của chúng không phải là tìm/sắp xếp trên toàn bộ giá trị của cột (số, ngày, dữ liệu char), nhưng thay vào đó tìm các từ/cụm từ riêng lẻ trong văn bản (các) trường được lập chỉ mục.

Họ cũng có thể thường bật tìm kiếm các từ tương tự, các loại khác nhau, lỗi chính tả phổ biến và các loại tương tự và thường bỏ qua các từ tiếng ồn. Cách khác nhau trong đó họ làm việc là lý do tại sao họ cũng có thể cần các nhà khai thác khác nhau để sử dụng chúng. (một lần nữa, kiểm tra tài liệu địa phương của bạn cho DBMS của bạn!)

+3

Tuyệt vời, cảm ơn. Vì vậy, về cơ bản một chỉ số chỉ là một danh sách các giá trị của một cột, mỗi chỉ số có một liên kết đến hàng chính xác (tôi giả sử đây sẽ là PK). DBMS sẽ phải lặp lại qua các hàng của bảng, chỉ xem xét cột có liên quan trong khi quét kết quả. Nếu đó là (gần đúng), câu trả lời của bạn đã giúp tôi rất nhiều. – orokusaki

+0

@orokusaki Tôi đã chỉnh sửa nhận xét của bạn như bạn đã lưu ý. (Mod có thể chỉnh sửa mà không có giới hạn thời gian). Làm rõ! –

1

Câu trả lời này là Oracle-cụ thể, nhưng những điểm chính trong các câu trả lời áp dụng cho hầu hết các hệ cơ sở dữ liệu quan hệ

How to choose and optimize oracle indexes?

+0

cảm ơn. BTW, cái quái gì đang diễn ra trong bức ảnh của anh, và đó có phải là một người thực sự không ?! – orokusaki

+1

http://www.charliewhite.info/ – CheeseConQueso

Các vấn đề liên quan