Đầu tiên, Solr không sử dụng B-tree. Chỉ mục Lucene (thư viện cơ bản được Solr sử dụng) được tạo bằng một chỉ mục chỉ đọc phân đoạn
. Đối với mỗi phân đoạn, Lucene duy trì một từ điển thuật ngữ, bao gồm danh sách các thuật ngữ xuất hiện trong phân đoạn, được sắp xếp theo từ điển. Việc tra cứu một thuật ngữ trong từ điển thuật ngữ này được thực hiện bằng cách sử dụng tìm kiếm nhị phân, do đó, chi phí tra cứu một thuật ngữ là O(log(t))
trong đó t là số lượng các số hạng. Ngược lại, việc sử dụng chỉ mục của một RDBMS tiêu chuẩn sẽ tốn O(log(d))
trong đó d là số lượng tài liệu. Khi nhiều tài liệu có cùng giá trị cho một số trường, đây có thể là một chiến thắng lớn.
Hơn nữa, người cam kết Lucene Uwe Schindler đã bổ sung hỗ trợ cho truy vấn phạm vi số vài năm trước. Đối với mọi giá trị của trường số , Lucene lưu trữ một số giá trị với các phân khu khác nhau. Điều này cho phép Lucene chạy các truy vấn phạm vi rất hiệu quả. Vì trường hợp sử dụng của bạn dường như tận dụng các truy vấn phạm vi số rất nhiều, điều này có thể giải thích tại sao Solr nhanh hơn nhiều. (Để biết thêm thông tin, hãy đọc javadocs rất thú vị và cung cấp liên kết đến các tài liệu nghiên cứu có liên quan.)
Nhưng Solr chỉ có thể làm điều này bởi vì nó không có tất cả các ràng buộc mà một RDBMS có. Ví dụ:Solr rất tệ trong việc cập nhật một tài liệu tại một thời điểm (nó thích cập nhật hàng loạt hơn).