パフォーマンスの問題が発生しています。これにより、次の処理が約2.5秒で実行され、40行のみが返されます。
SELECT DISTINCT song.song_id, song.title, song.length, song.bpm, song.keysig
FROM song
INNER JOIN (
SELECT song_id
FROM song_genre
WHERE genre_id IN ('25')
) genre1 ON genre1.song_id = song.song_id
INNER JOIN (
SELECT song_id
FROM song_production
WHERE production_id IN ('8')
) production1 ON production1.song_id = song.song_id
WHERE approved='1'
ORDER by song.priority DESC, song.song_id DESC
LIMIT 0, 40
ORDER BY
クエリを実行すると、0.01秒で実行が破棄されます。
使用しているJOINSが原因で、問題が情報のカウント方法に関連している可能性があることを理解しています。クエリをネストする必要があるかもしれませんが、100%ではありません。
idselect_typeテーブルタイプpossible_keyskeykey_len ref rows Extra 1PRIMARY<派生3>ALLNULL NULL NULLNULL321一時的なものを使用します。filesortの使用 1PRIMARY<派生2>ALLNULL NULL NULLNULL3424結合バッファーの使用 1 PRIMARY song eq_ref PRIMARY PRIMARY 4Production1.song_id1使用場所 3派生song_productionrefPRIMARY PRIMARY4339インデックスの使用 2派生song_genreインデックスNULLPRIMARY8 NULL3424whereを使用します。インデックスの使用
表song
:
CREATE TABLE `song` (
`song_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`title` tinytext,
`length` varchar(5) DEFAULT NULL,
`Type` varchar(1) DEFAULT NULL,
`Vocals` varchar(10) DEFAULT NULL,
`Themes` varchar(10) DEFAULT NULL,
`Explicit` varchar(10) DEFAULT NULL,
`timesig` varchar(3) DEFAULT NULL,
`keysig` varchar(250) NOT NULL,
`bpm` int(3) DEFAULT NULL,
`speed` varchar(7) DEFAULT NULL,
`Era` varchar(10) DEFAULT NULL,
`Language` varchar(10) DEFAULT NULL,
`Keywords` varchar(10) DEFAULT NULL,
`description` mediumtext,
`search_description` longtext NOT NULL,
`key` varchar(25) NOT NULL,
`priority` int(2) NOT NULL,
`approved` int(1) NOT NULL DEFAULT '0',
PRIMARY KEY (`song_id`),
FULLTEXT KEY `description` (`description`),
FULLTEXT KEY `search_description` (`search_description`),
FULLTEXT KEY `title` (`title`),
FULLTEXT KEY `head_desc` (`title`,`search_description`)
) ENGINE=MyISAM
AUTO_INCREMENT=1388
DEFAULT CHARSET=utf8 ;
表song_genre
:
CREATE TABLE `song_genre` (
`genre_id` int(10) NOT NULL,
`song_id` int(10) NOT NULL,
PRIMARY KEY (`genre_id`,`song_id`)
) ENGINE=MyISAM
DEFAULT CHARSET=latin1 ;
表song_production
:
CREATE TABLE `song_production` (
`production_id` int(10) NOT NULL,
`song_id` int(10) NOT NULL,
PRIMARY KEY (`production_id`,`song_id`)
) ENGINE=MyISAM
DEFAULT CHARSET=latin1 ;