我在 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" 的期望结果将返回 Artist_profile ID 1 和 3,因为 Jake 以 "ja" 开头,而 Bob 播放的流派包括 "ja"。
桌子很简单。
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 秒。我能做些什么来加快速度并使我的子查询更有效率?