1
範圍我有(start_date, end_date, description)
表 - 爲了找到一個給定的時間內發生的事件,我做有效利用兩列的SQLite
SELECT *
FROM table
WHERE start_date < $view_end AND end_date > $view_start
這正常工作,許多數據庫產品會能夠在兩列上使用索引來高效地找到結果 - 但SQLite只支持一次使用一個範圍索引(我可以執行大量索引等於比較,但只有一個索引大於或小於)。因此,如果我想查看一個百萬表中的中間10個事件,我只能使用一個索引來消除其中的一半,並且必須對另外50萬個表執行全表掃描。
是否有任何很酷的技巧,我可以做一個有效的方式重寫這個查詢,鑑於SQLite的限制?
原始查詢包括在$ view_start之前開始的記錄,而您的查詢不包含。 – Jeff
@Jeff,我很清楚我的查詢與海報不同,它是基於'$ view_start'小於'$ view_end'並且'start_date'小於'end_date'的假設。除非另有說明,否則我認爲這完全是一個合理的假設。現在,您可以選擇我的包含記錄,其中OP查詢不包括'start_date = $ view_end',但它只是爲了便於閱讀而完成,您可以輕鬆地將其設置爲'start_date> $ view_start AND start_date <$ view_end '而不是如果你願意,它會仍然使用正確的索引。 – Seph
這是更快,但是,我需要在視圖開始和視圖結束之間有任何/任何/部分自己的事件:( – Shish