1

インデックスとより良い SQL クエリを使用する方法と方法についてのアイデアや考えを知りたいです。

これが私のSQLクエリの例です:

SELECT albums.id AS album_id, albums.name AS album_name, albums.upc, albums.status, 
albumstatus.description AS album_status, DATE_FORMAT(albums.created, '%Y-%m-%d') AS created_date,  
albuminfos.label   
FROM albums,albumstatus, albumtypes, albuminfos  
WHERE albums.status = albumstatus.id AND albumtypes.id = albums.albumtype_id AND albums.id  = albuminfos.id  
AND albums.account_id = 9999  
AND albums.status IN (1, 2) 

そして、mysql EXPLAIN を使用して出力を試みました。

id  select_type  table        type    possible_keys                           key         key_len  ref                                              rows  Extra        

 1  SIMPLE       albums       ref     PRIMARY,account_id,status,albumtype_id  account_id  4        const                                            4148  Using where  
 1  SIMPLE       albumstatus  eq_ref  PRIMARY,id                              PRIMARY     4        albums.status             1  Using where  
 1  SIMPLE       albumtypes   eq_ref  PRIMARY                                 PRIMARY     1        albums.albumtype_id       1  Using index  
 1  SIMPLE       albuminfos   eq_ref  PRIMARY                                 PRIMARY     4        albums.id                 1               

多くのLEFT JOINを使用し、それらを主キーに接続する男です...私の友人は、インデックスを使用して結果を取得する速度を向上させるように私に言いました..インデックスが速度を遅くすることがわかったとき、私は混乱しましたクエリの作成: INSERT、DELETE、UPDATE で、album および albuminfos テーブルにはいつでも新しいレコードまたは更新されたレコードが含まれている可能性があります。

  1. 私のクエリは良いですか?
  2. mysql EXPLAIN で知っておくべきことは何ですか?
    • インデックスは使用できますか? はいの場合..どのように?
  3. 私のセットアップの善悪は?

ありがとう!

4

2 に答える 2

0

「SHOW CREATE TABLE」を使用して、テーブルの詳細を提供できますか?

EXLPAIN の出力から、この SQL には現在のキー (PRIMARY キー) で十分であるように見えます。ご覧のとおり、EXPLAIN のすべての行は、キーが使用されていることを示しています (PRIMARY の行)。

出力の解釈方法についてhttp://dev.mysql.com/doc/refman/5.0/en/explain-output.htmlを読むことをお勧めします。注意すべき最も重要なことは、possible_keyNULLであることです (つまり、データ選択にキーを使用しない)、数が少ない (何も一致しない場合を除き、テーブル内の行の総数は問題ありません)、Extraは一時的な使用のようなことを言うべきではありません; ファイルソートを使用すると、結合/ソート/選択/検索が遅くなります。

于 2013-07-01T07:51:15.417 に答える