2012-03-23 16 views
5

Nếu tôi thêm một chỉ mục văn bản đầy đủ trong PostgreSQL, các truy vấn LIKE và ILIKE của tôi có tự động sử dụng nó không?Sẽ thêm một chỉ mục văn bản đầy đủ trong PostgreSQL tăng tốc các truy vấn thông thường của tôi sử dụng LIKE?

Tôi có cần phải sử dụng cú pháp văn bản đầy đủ đặc biệt để tận dụng lợi thế của một chỉ mục toàn văn trong PostgreSQL:

SELECT title, ts_headline(body, query) AS snippet, ts_rank_cd(body_tsv, query, 32) AS rank 
    FROM blog_entry, plainto_tsquery('hello world') AS query 
    WHERE body_tsv @@ query 
    ORDER BY rank DESC; 

Trả lời

7

Không, một chỉ mục toàn văn bản sẽ không được sử dụng bởi các nhà điều hành LIKE .

Với PostgreSQL 9.1 bạn có thể tạo một kiểu mới của chỉ số này sẽ tăng tốc độ NHƯ hoạt động ngay cả khi các ký tự đại diện không chỉ ở phần cuối của biểu thức

http://www.depesz.com/2011/02/19/waiting-for-9-1-faster-likeilike/

+0

Hoạt động như một sự quyến rũ. Cảm ơn! –

5

Để mở rộng về câu trả lời ahwnn, họ là các so sánh khác nhau và không thể sử dụng cùng một chỉ mục.

Tìm kiếm toàn văn luôn liên quan đến việc mã hóa văn bản và thường liên quan đến các từ gốc. Điều này khiến việc tìm kiếm các tiền tố chính xác trở nên khó khăn và thường không thể, ví dụ: khớp hai không gian trong một hàng (chúng thường chỉ bị loại bỏ).

Bạn cũng có thể muốn đọc trên các lớp toán tử chỉ mục khác nhau, cụ thể là text_pattern_ops và bạn bè. Nếu không có '% cab' LIKE này không thể được tối ưu hóa thành> = 'cab' AND < 'cac'.

http://www.postgresql.org/docs/9.1/static/indexes-opclass.html

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