such as: SELECT *FROM ( SELECT ams* FROM ams WHERE ams.define1 = "3") t LEFT JOIN sON t.type = s.typeORDER BY t.time DESC3 When writing SQL, keep time complexity, space complexity, data set, divide and conquer in mind.My pleasure.
這類事情要看場景,如果數據量大,如果幾秒內返回,客戶可以接受也行,(各位不要懷疑,做內網應用經常的事,不稀奇),但要在0.0幾秒返回結果,可以評估下,你的數據變動頻繁嗎,如果不頻繁變化少,就直接在數據變動後,後台起任務查緩存結果,用的時候直接查結果。如果變動多,則將需要用到的數據做成小數據量表。最後實在不行,那就不要考慮資料庫抗了。最後提醒一點,問問需求方,他們真的要這麼查嗎,有的時候他們會說,我們基本不查。
2.1可以先查詢出第一張表,加排序,然後外層加子查詢關聯第二張表(第一張表的數據不多)
如果ams.define1="3" or ams.define2="3"數量不多的話,可以先對ams表做一個篩選查詢,即改成:
SELECT
ams.id,
......
ams.define2,
s.cost_type_name
FROM
(SELECT
id,
......
define2
FROM
ams_finance_account_data
WHERE
define1="3"
OR
define2="3") ams
LEFT JOIN
ams_cost_type_formula_system s
ON
ams.feeType=s.cost_type_id
ORDER BY
ams.producetime DESC