2011-07-16 54 views
0

我必須爲電影開發一個Web應用程序。 現在,在我的數據庫中,我有一張關於人物和電影之間關係的表格,另一張關於演員(也是數字)和電影之間關係的表格。 最後一個也包含有關角色的信息。數據庫速度優化(多個查詢)

我的問題不在於關於標準化的問題,我想知道在速度方面爲每個表執行兩個查詢,還是將它們合併爲一個具有空值的字符在某些元組中的效率更高並做一個單一的查詢?

編輯:

這兩個查詢現在(圖面,讓他的演技和職業):

$query1 = ' 
     SELECT RelationFigureCardType.department, RelationFigureCardType.job, Movie.card_type_id, Movie.id, Movie.original_name, Movie.release_date, Movie.cover, Movie.cover_ext 
     FROM relation_figure_cards AS RelationFigureCard 
      RIGHT JOIN relation_figure_card_types AS RelationFigureCardType ON 
       (RelationFigureCard.relation_figure_card_type_id = RelationFigureCardType.id) 
      RIGHT JOIN cards AS Movie ON 
       (RelationFigureCard.card_id = Movie.id) 
     WHERE 
      RelationFigureCard.figure_card_id = '.$figureId.' 
      AND RelationFigureCard.last_card_version = 1 
     ORDER BY Movie.card_type_id, RelationFigureCardType.priority, Movie.release_date 
     ; 
    '; 

$query2 = ' 
     SELECT RelationActorCard.is_main, RelationActorCard.is_guest, Movie.card_type_id, Movie.id, Movie.original_name, Movie.release_date, Movie.cover, Movie.cover_ext, Character.id, Character.original_name, Character.cover, Character.cover_ext 
     FROM relation_actor_cards AS RelationActorCard 
      RIGHT JOIN cards AS `Character` ON 
       (RelationActorCard.character_card_id = Character.id) 
      RIGHT JOIN cards AS Movie ON 
       (RelationActorCard.card_id = Movie.id) 
     WHERE 
      RelationActorCard.figure_card_id = '.$figureId.' 
      AND RelationActorCard.last_card_version = 1 
     ORDER BY Movie.card_type_id, Movie.release_date 
     ; 
    '; 

回答

1

我強烈懷疑單查詢方法是更快。

我更強烈地懷疑,當你不使用存儲過程時,它會更快,但從PHP等腳本解釋器或其他任何允許你與之交互的進程中一個接一個地執行這兩個查詢MySQL的。

如果你想爲你的情況下,一個可靠的答案,有一個非常簡單的答案:

您的真實數據特定情況下進行測試和比較性能。 (這被稱爲「基準測試」。)

+0

我懷疑你最後一句話中有點諷刺:)但你是對的。 這只是我現在沒有足夠的數據來做到這一點。 –

+0

@Sébastien - 我記得有一段時間我不知道基準是什麼,所以爲什麼不解釋它?這裏沒有諷刺意味...... – Lumi

1

取決於查詢。在MySQL中,LEFT JOIN是正常的。使用適當的索引進行單個查詢。不要優化它(打破較小的查詢),除非有必要

+0

我不必做一個JOIN,它只是一個簡單的具有所需電影ID的元組的SELECT。有兩種可能性:兩次查詢兩個表(每個表中數據較少)或一次包含所有數據的大表中。 –

+0

或者你也可以使用2個查詢的UNION?無論如何,沒有確切的查詢,這是很難回答 –

+0

在這裏,我更新了我的帖子與兩個查詢。 –