PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Quét chỉ mục để so sánh nhiều cột - thứ tự cột chỉ mục không đồng nhất

PostgreSQL triển khai các bộ giá trị rất kỹ lưỡng, (không giống như một nửa các triển khai được tìm thấy trong Oracle, DB2, SQL Server, v.v.). Bạn có thể viết điều kiện của mình bằng cách sử dụng "bất đẳng thức bộ giá trị", như trong:

select * 
from table1
where (a, -b, c) >= (10, -20, 30)
order by a, -b, c
limit 10

Xin lưu ý rằng vì cột thứ hai theo thứ tự giảm dần, bạn phải "đảo ngược" giá trị của nó trong quá trình so sánh. Đó là lý do tại sao nó được biểu thị là -b và cả, -20 . Điều này có thể phức tạp đối với các cột không phải số như ngày tháng, véc-tơ, LOB, v.v.

Cuối cùng, vẫn có thể sử dụng chỉ mục với -b giá trị cột nếu bạn tạo chỉ mục đặc biệt, chẳng hạn như:

create index ix1 on table1 (a, (-b), c);

Tuy nhiên, bạn không bao giờ có thể buộc PostgreSQL sử dụng một chỉ mục. SQL là một ngôn ngữ khai báo, không phải là một ngôn ngữ bắt buộc. Bạn có thể lôi kéo để làm điều đó bằng cách cập nhật số liệu thống kê của bảng và cũng bằng cách chọn một số lượng nhỏ hàng. Nếu LIMIT của bạn quá lớn, PostgreSQL có thể có xu hướng sử dụng tính năng quét toàn bộ bảng.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Báo cáo đường ray không thể tìm thấy một cột ở đó

  2. Hibernate 3.6.10 không xóa theo tầng thông qua OneToMany JoinTable

  3. Làm cách nào để hợp nhất các cột từ hai bảng thành một đầu ra?

  4. Cách current_timestamp () hoạt động trong PostgreSQL

  5. 'Không thể tìm thấy pg-0.12.2 trong bất kỳ nguồn nào' khi chạy rspec