3

複数の条件を持つ複数のテーブルから選択するこの形式をどこかで見て、長年これを実装してきました。私が知りたいのは、それをもっと速くする方法があるかどうかです. クエリの背景: メッセージ テーブル b/w 学生からメッセージを選択し、学生がジョブ テーブルに投稿したジョブのチューターを選択しています。チューターの情報は tutorinfo テーブルに保存され、studentinfo は studentinfo テーブルに保存されます。

また、これはどのような結合か教えてください。誰かがクロス結合だと言ったが、よくわからない。私は最近まで結合について知りませんでしたが、結合する必要はありませんでした。この形式は、かなり長い間私に役立ってきました。結合フォーマットを使用すると、どのように改善されるかはわかりません。

現在のクエリは次のとおりです::

SELECT 
messages.* ,  
tutorinfo.id as tutor_id, 
jobs.student_id as student_id, jobs.job_title
from messages, tutorinfo, studentinfo, jobs where
messages.job_id= jobs.id and jobs.student_id = '3' and messages.thread_id = '2' and        messages.tutor_id = tutorinfo.id and messages.job_id = jobs.id and studentinfo.id=jobs.student_id 
4

3 に答える 3

1

これは、より現代的なスタイルで書かれた select ステートメントです。このスタイルでは、結合を確認できます (これらはすべて内部結合であることに注意してください)。結合された列は等号で結合されているため、(両方のクエリで) 内部結合であることがわかります。クロス結合または外部結合を行う方法では、=特別な構文を使用する「結合」形式で、(単なる ではなく) 特別な形式が必要です。

SELECT m.*, 
       t.id as tutor_id, 
       j.student_id as student_id, j.job_title
from messages m
join jobs j on m.job_id = j.job_id
join studentinfo s on j.student_id = s.id
join tutorinfo t on m.tutor_id = t.id
where j.student_id = '3' and m.thread_id = '2' 

1 つはっきりしていることは、studentinfo は使用されていないということです。それ以外は、結合として使用されるすべての列にインデックスを追加することで、最適化の方法はあまり見られません。

SELECT m.*, 
       t.id as tutor_id, 
       j.student_id as student_id, j.job_title
from messages m
join jobs j on m.job_id = j.job_id
join tutorinfo t on m.tutor_id = t.id
where j.student_id = '3' and m.thread_id = '2' 
于 2013-06-30T05:16:02.463 に答える
1

MySQL JOINS を使用する

ここに画像の説明を入力

    SELECT
     jobs.`id` AS jobs_id,
     jobs.`job_title` AS jobs_job_title,
     messages.`id` AS messages_id,
     messages.`job_id` AS messages_job_id,
     messages.`thread_id` AS messages_thread_id,
     messages.`tutor_id` AS messages_tutor_id,
     messages.`student_id` AS messages_student_id,
     tutorinfo.`id` AS tutorinfo_id
FROM
     `messages` messages INNER JOIN `tutorinfo` tutorinfo ON messages.`tutor_id` = tutorinfo.`id`
     INNER JOIN `jobs` jobs ON messages.`job_id` = jobs.`id`  WHERE jobs.student_id = '3' AND messages.thread_id = '2'

また、これらのものを見てください

SQL 結合の視覚的な説明

SQL 結合の視覚的表現

于 2013-06-30T05:23:33.713 に答える