I'm reconstructing a search query coz it's becoming redundant in "What I see" and I'm wondering what
(albums_artists, artists) ( ) does in join? is it for boosting performance?
A query that uses simple inner joins, using the old (SQL-89) implicit join syntax:
SELECT
ma_users.name,
ma_users.username,
albums.id AS album_id,
albums.upc,
albums.name AS album_name,
albums.status,
albuminfos.label,
DATE_FORMAT(albums.created, '%Y-%m-%d') AS created_date,
CONCAT(artists.name) AS artist_name,
COUNT(tracks.id) AS total_tracks,
albumstatus.description AS album_status
FROM albums, albuminfos, ma_users , (albums_artists, artists) , tracks ,(albumstatus, albumtypes)
WHERE
albums.id = albuminfos.id
AND ma_users.id = albums.account_id
AND albums.id = albums_artists.artist_id
AND albums_artists.artist_id = artists.id
AND tracks.album_id = albums.id
AND albums.status = albumstatus.id
AND albumtypes.id = albums.albumtype_id
AND albuminfos.label LIKE '%$keywords%'
GROUP BY albums.id
ORDER BY albuminfos.label
Accepting also for opinions for enhancements and errors that I need to anticipate.
The following recommendations will help you in your SQL tuning process.
You'll find 3 sections below:
ALTER TABLE `albuminfos` ADD INDEX `albuminfos_idx_id` (`id`);
ALTER TABLE `albums` ADD INDEX `albums_idx_id_account_status_albumty` (`id`,`account_id`,`status`,`albumtype_id`);
ALTER TABLE `albums_artists` ADD INDEX `albums_artists_idx_artist_id` (`artist_id`);
ALTER TABLE `albumstatus` ADD INDEX `albumstatus_idx_id` (`id`);
ALTER TABLE `albumtypes` ADD INDEX `albumtypes_idx_id` (`id`);
ALTER TABLE `artists` ADD INDEX `artists_idx_id` (`id`);
ALTER TABLE `ma_users` ADD INDEX `ma_users_idx_id` (`id`);
ALTER TABLE `tracks` ADD INDEX `tracks_idx_album_id` (`album_id`);
SELECT
ma_users.name,
ma_users.username,
albums.id AS album_id,
albums.upc,
albums.name AS album_name,
albums.status,
albuminfos.label,
DATE_FORMAT(albums.created,
'%Y-%m-%d') AS created_date,
CONCAT(artists.name) AS artist_name,
COUNT(tracks.id) AS total_tracks,
albumstatus.description AS album_status
FROM
albums,
albuminfos,
ma_users,
(albums_artists,
artists),
tracks,
(albumstatus,
albumtypes)
WHERE
albums.id = albuminfos.id
AND ma_users.id = albums.account_id
AND albums.id = albums_artists.artist_id
AND albums_artists.artist_id = artists.id
AND tracks.album_id = albums.id
AND albums.status = albumstatus.id
AND albumtypes.id = albums.albumtype_id
AND albuminfos.label LIKE '%$keywords%'
GROUP BY
albums.id
ORDER BY
albuminfos.label