我只想問下面是否有這種數據庫設計,下面的查詢會對查詢性能產生很大影響,或者應該分解查詢而不是多個子查詢。雖然這個子查詢適用於我,但我只想確保有一天它不會影響性能。我的目標是使用這個查詢,我想爲所有這些表生成一個動態查詢。查詢示例是查看特定商品中出席的參與者列表,並在2個給定日期之間開始日期。提前感謝您。查詢性能影響
下面是我的示例代碼,將在年內1至3歲之間查看出席。
SELECT TT.title, TTP.*, TS.*, TP.lastname, TP.firstname, (DATE_FORMAT(NOW(), '%Y') - DATE_FORMAT(TP.birthday, '%Y') - (DATE_FORMAT(NOW(), '00-%m-%d') < DATE_FORMAT(TP.birthday, '00-%m-%d')))AS age, TP.birthday
FROM tbl_trainingparticipant AS TTP
LEFT JOIN (
SELECT t1.*
FROM tbl_schedules t1
WHERE t1.sched_id = (
SELECT t2.sched_id
FROM tbl_schedules t2
WHERE t2.training_id = t1.training_id
ORDER BY t2.sched_id DESC LIMIT 1
)
)AS TS ON TTP.training_id = TS.training_id
LEFT JOIN tbl_participants AS TP
ON TTP.participant_id = TP.participant_id
LEFT JOIN tbl_trainings AS TT
ON TT.training_id = TS.training_id
HAVING age BETWEEN 1 AND 3
這可能屬於代碼審查。 –
只有您知道它對數據集的性能影響,以及您認爲可接受的性能。實施,測試,測量,分析,優化。 – Adrian
兩個表格,每個表格有10個以上的「關係」表格,將它們連接在一起。相當標準。你當然不想把它們合併成一張表。對於時間表的子查詢有點雜亂,但我想如果你只需要選擇每個訓練課程中應該做的最新時間表。如果'tbl_schedules' <->'tbl_trainings'應該總是1-1,那麼''tbl_schedules'中的'training_id'是唯一的。 – ebyrob