Từ blog appengine:Làm cách nào để appengine thực hiện truy vấn trên danh sách một cách hiệu quả?
Lập kế hoạch truy vấn nâng cao - Chúng tôi đang loại bỏ nhu cầu phát triển chỉ mục và giảm yêu cầu chỉ mục tùy chỉnh cho nhiều truy vấn. SDK sẽ đề xuất các chỉ mục tốt hơn trong một số trường hợp và một bài viết sắp tới sẽ mô tả những gì có thể tối ưu hơn nữa.
Là một thử nghiệm, tôi có một thực thể trong appengine mà có một listProperty
class Entity(db.Model):
tags = db.StringListProperty()
Tôi có 500.000 đơn vị, một nửa trong số họ có thẻ = [ '1'], và nửa còn lại có thẻ = [ '2']
truy vấn của tôi là
SELECT FROM Entity WHERE tags='1' and tags='2'
Nó trả về không có kết quả thực sự nhanh chóng. Kế hoạch là nó sử dụng để đạt được điều này? Danh sách được lập chỉ mục để đạt được điều này như thế nào? Trong những ngày cũ, một chỉ số bùng nổ sẽ là cần thiết.
IIRC điều này được đề cập trong một trong các cuộc đàm phán công nghệ - nó không bao giờ yêu cầu chỉ mục bùng nổ, chỉ là một StringListProperty – bdonlan
Không có thay đổi lập kế hoạch truy vấn nâng cao nào sẽ ảnh hưởng đến truy vấn này. Bạn đã chèn các thực thể như thế nào? Nếu tất cả các thẻ có thẻ = 2 có ID cao hơn các thẻ có thẻ = 1 (hoặc ngược lại), truy vấn này là không đáng kể để thỏa mãn. –
Tôi nghĩ rằng truy vấn có nghĩa là: CHỌN TỪ ĐỐI TƯỢNG WHERE tags = '1' và thẻ = '2' ORDER BY ngày – Jaap