2009-07-23 67 views
16

chính xác là gì (và ưu điểm/nhược điểm) giữa chỉ mục toàn văn và chỉ mục thông thường trên cột VARCHAR? Khi nào tôi sẽ sử dụng chỉ mục nào?Máy chủ SQL: Chỉ mục bình thường so với chỉ mục toàn văn

Tôi có vô số cột VARCHAR (địa chỉ - tên thành phố, tên đường phố, v.v.) mà tôi cần tìm kiếm theo cách hiệu quả nhất và tôi đang cố gắng tìm ra loại chỉ mục nào để sử dụng và tại sao.

Cảm ơn bạn!

Trả lời

19

Tùy thuộc vào loại tìm kiếm bạn muốn thực hiện. Ví dụ, bạn không thể sử dụng một chỉ số bình thường với truy vấn này:

SELECT * FROM [MyTable] WHERE [MyColumn] LIKE '%' + @SearchText + '%' 

Nó không phải sargable. Đây là sargable, nhưng selectivity có thể không phải rất tốt:

SELECT * FROM [MyTable] WHERE [MyColumn] LIKE @SearchText + '%' 

Bạn sử dụng một chỉ mục toàn văn hoàn toàn khác nhau:

SELECT * FROM [MyTable] WHERE CONTAINS([MyColumn], @SearchText) 
+0

Có lý do nào để không sử dụng chỉ mục toàn văn sau đó không? – Alex

+0

Chúng sử dụng nhiều dung lượng đĩa và chậm để tính lại. –

+1

Việc đề cập đến khá là tuyệt vời - tôi cảm thấy như thế này không được dạy đủ. – AndrewPK

8

Thông thường, khi tìm kiếm với một chỉ số bình thường, bạn có thể tìm kiếm chỉ trong một trường đơn lẻ, ví dụ "tìm tất cả các thành phố bắt đầu bằng A" hoặc một cái gì đó tương tự.

Chỉ mục toàn văn cho phép bạn tìm kiếm trên nhiều cột, ví dụ: tìm kiếm cùng một lúc trên đường phố, thành phố, tỉnh, v.v. Đó có thể là một lợi thế nếu bạn muốn làm điều gì đó giống như tìm kiếm theo kiểu Google - chỉ cần nhập cụm từ tìm kiếm và tìm tất cả các hàng có cụm từ tìm kiếm đó ở bất kỳ nơi nào trong cột VARCHAR.

Ngoài ra, với tìm kiếm thông thường, bạn bị giới hạn số lượng công việc bạn có thể làm - bạn có thể tìm kiếm kết hợp chính xác hoặc chỉ LIKE - đó là về nó.

Với chỉ mục toàn văn, bạn có thể tìm kiếm các biểu mẫu từ (chạy, chạy, v.v.) và cũng cho các từ tương tự bằng cách chỉ định từ điển riêng của bạn. Bạn có thể tìm kiếm dựa trên một số ngôn ngữ nếu đó là một vấn đề. Bạn có thể tìm kiếm các mục có hai hoặc nhiều cụm từ "NEAR".

Marc

+1

+1 để đề cập đến các lý do thực tế tại sao phải làm chỉ mục FULLTEXT, thay vì chỉ nhận xét về cú pháp và các hoạt động tương thích. – dayuloli

3

Từ MSDN:

Ngược lại với tìm kiếm văn bản đầy đủ, vị NHƯ Transact-SQL hoạt động trên chỉ mô hình nhân vật. Ngoài ra, bạn không thể sử dụng vị từ LIKE để truy vấn dữ liệu nhị phân được định dạng. Hơn nữa, một truy vấn LIKE đối với một lượng lớn dữ liệu văn bản phi cấu trúc chậm hơn nhiều so với truy vấn toàn văn tương đương với cùng một dữ liệu.

Truy vấn LIKE đối với hàng triệu hàng dữ liệu văn bản có thể mất vài phút để trả lại; trong khi truy vấn toàn văn chỉ có thể mất vài giây hoặc ít hơn so với cùng một dữ liệu, tùy thuộc vào số hàng được trả về.

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