[英]Speed up SELECT from several tables
我需要加快sql查詢的速度。 或更好地處理php代碼。 搜索數據庫並將結果顯示在前端時的一些最佳實踐。
基本上我有三個表-包含記錄的盒子-包含歌曲的記錄-歌曲
我希望我的前端代碼列出如下內容:
Box 1
-Record 1
--Song 1
--Song 2
etc....
-Record 2
--Song 1
--Song 2
etc....
Box 2
-Record 1
--Song 1
--Song 1
etc. etc. etc.
“我的方式”非常耗時:
由於選擇呼叫的數量非常龐大(很多盒子,很多朗誦者),因此需要很長時間才能完成
我猜有一個更簡單的方法(從服務器角度來看)可以做到這一點。 將dato拉到php數組以及那里的邏輯或其他更聰明的邏輯上。
問題:使用php從關系數據庫中獲取數據的最佳實踐是什么?
Br。 安德斯
您需要了解JOIN
。 在這里,您將使用兩個外部聯接。 這樣,您僅使用一個選擇查詢就可以達到相同的結果,而PHP和MySQL要做的工作量則要少得多。
您的SQL看起來像這樣:(請注意,我使用SELECT *
作為真實列列表的替代者,因為我不知道您擁有哪些列-使用SELECT *
通常不是一個好主意)
SELECT
*
FROM
Box
LEFT JOIN Record ON Box.BoxID = Record.BoxID
LEFT JOIN Song ON Record.RecordID = Song.RecordID
基於單個集合的選擇操作將比許多基於單行的選擇更快。
您可以使用聯接實現此目標,請參見: http : //en.wikipedia.org/wiki/Join_(SQL )
我不知道您的數據庫結構,因此這不是一個可行的示例,這是如何返回特定盒子的所有歌曲。
SELECT s.* FROM box b
INNER JOIN record r ON r.box_id = b.box_id
INNER JOIN song s ON s.record_id = r.record_id
WHERE box.name = 'mybox'
將比以下速度更快:
select from box b
where box.name = 'mybox'
LOOP
select record_id from record
LOOP
select * from song
END
END
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.