0
我有一些問題與找到一個令某些過濾器的下一個ID就可以查詢 - 就像它應該是從一個特定城市等PHP - SQL優化最小/最大速度太慢
目前,它被用於一個功能,它會根據當前的順序吐出前一個或下一個ID。所以它可以是min(id)或max(id),其中max(id)明顯更快,因爲它必須經歷更少的行。
該查詢工作得很好,但它很慢,因爲它要經過123953行來查找ID。有什麼辦法可以優化這個嗎?
功能例如:
SELECT $minmax(orders.orders_id) AS new_id FROM orders LEFT JOIN orders_status ON orders.orders_status = orders_status.orders_status_id $where_join WHERE orders_status.language_id = '$languages_id' AND orders.orders_date_finished != '1900-01-01 00:00:00' AND orders.orders_id $largersmaller $ordersid $where;
活生生的例子
SELECT min(orders.orders_id)
FROM orders
LEFT JOIN orders_status ON orders.orders_status = orders_status.orders_status_id
WHERE orders_status.language_id = '4'
AND orders.orders_date_finished != '1900-01-01 00:00:00'
AND orders.orders_id < 4868771
LIMIT 1
對orders.orders_id有一個索引並刪除orders_products和products的連接。無論如何你都不使用這兩張表。 where子句將你的左連接變爲orders_status成爲內連接,順便說一句。 – fancyPants
是date_finished的關鍵嗎?那麼這個日期怎麼會是1900-01-01?除非你正在處理一些歷史數據,否則NULL不會是更多的邏輯值(因爲我認爲這是1900年左右) –
@IvoP這是一個真實的遺留系統,充滿了缺陷 - 因此,爲什麼它不是完全邏輯的或最佳 – Dandersen