簡體   English   中英

從多個表中加速SELECT

[英]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.

“我的方式”非常耗時:

  1. 我使用標准SQL搜索“ Box”表。
  2. 對於每一行,我調用一個函數來查找該框的每個記錄
  3. 對於每個記錄,我調用一個函數來查找該記錄的每首歌曲

由於選擇呼叫的數量非常龐大(很多盒子,很多朗誦者),因此需要很長時間才能完成

我猜有一個更簡單的方法(從服務器角度來看)可以做到這一點。 將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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM