构建索引
- 在表A的
category_a
字段上创建索引:
CREATE INDEX idx_a_category_a ON A(category_a);
原因:此索引可以加速对表A中category_a
为'特定分类'的行的查找,在执行JOIN
操作前能快速定位到符合条件的A表记录。
- 在表B的
id_a_fk
字段上创建索引:
CREATE INDEX idx_b_id_a_fk ON B(id_a_fk);
原因:表B通过id_a_fk
与表A关联,此索引有助于快速连接表A和表B,在找到表A中符合category_a
条件的记录后,能快速定位到表B中与之关联的记录。
- 在表C的
name_c
字段上创建索引:
CREATE INDEX idx_c_name_c ON C(name_c);
原因:此索引可加速对表C中name_c
包含'特定字符串'的行的查找,提升查询效率。
- 在表C的
id_b_fk
字段上创建索引:
CREATE INDEX idx_c_id_b_fk ON C(id_b_fk);
原因:表C通过id_b_fk
与表B关联,此索引有助于快速连接表B和表C,提高JOIN
操作的效率。
JOIN查询语句
SELECT A.id_a, A.name_a, A.category_a, B.id_b, B.name_b, C.id_c, C.name_c
FROM A
JOIN B ON A.id_a = B.id_a_fk
JOIN C ON B.id_b = C.id_b_fk
WHERE A.category_a = '特定分类' AND C.name_c LIKE '%特定字符串%';
原因解释
- JOIN操作:通过
JOIN
将表A、B、C连接起来,先基于id_a
连接表A和表B,再基于id_b
连接表B和表C,从而构建起三表之间的关系,获取所需的所有字段。
- WHERE条件:
A.category_a = '特定分类'
筛选出表A中符合分类条件的记录,C.name_c LIKE '%特定字符串%'
筛选出表C中name_c
包含特定字符串的记录。通过合理构建索引和JOIN
查询,能利用索引快速定位数据,减少全表扫描,从而实现高效查询。