私は間違いなくMySQLに特に熟練していませんが、今まではそうである必要はありませんでした。私は大規模なデータベース、特に1500行以上のユーザーテーブルを扱っています。したがって、IN句で達成していたことを効率的に達成する方法を理解する必要があります。
クエリは次のとおりです。
SELECT *
FROM artists_profile
WHERE artist_name LIKE '%$test%' OR id IN (SELECT profile_id
FROM artists_profileltp_join
WHERE genre_id IN (SELECT id
FROM artists_ltp
WHERE genre LIKE '%$test%') OR
details LIKE '%$test%')
サンプルデータを含むデータベース
artists_profile artists_profileltp_join
+------+-------------+ +---------+------------+---------+
| ID | artist_name | |genre_id | profile_id | details |
+------+-------------+ +---------+------------+---------+
| 1 | Jake | | 1 | 2 | rap |
| 2 | Obama | | 2 | 3 | smooth |
| 3 | Bob | | 1 | 1 | metal |
+------+-------------+ +---------+------------+---------+
artists_ltp
+------+-------+
| ID | genre |
+------+-------+
| 1 | rock |
| 2 | jazz |
+------+-------+
$ test = "ja"の望ましい結果は、Jakeが "ja"で始まり、Bobが "ja"を含むジャンルを再生するため、artist_profileID1および3を返します。
テーブルはとてもシンプルです。
Artists_profileには、ユーザーに関するすべての固有の情報が含まれています。Artists_profileltp_joinには、profile_id(int(11))、genre_id(int(11))、およびdetails(varchar(200))フィールドがあり、artists_profileテーブルをartists_ltpテーブルに結合するだけです。
Artists_ltpには、一意のIDとvarchar(50)フィールドがあります。クエリの実行には平均30秒かかります。これを高速化し、サブクエリをより効率的にするために何ができますか?