请教一个mysql多表联合查询,并根据汉字首字母进行排序的sql优化问题,哪位大神帮忙看下

3张表ynso_km_knowt1知识表,ynso_km_knowt2版本表,ynso_know_label_relationt3标签与版本的关联表t1与t2的关系是1对... 3张表ynso_km_know t1 知识表, ynso_km_know t2 版本表, ynso_know_label_relation t3 标签与版本的关联表

t1与t2的关系是1对多,但是可以根据t1.latestVersionId(最新版本)来获取到最新的版本,
t3是一个标签与版本的关系表,现在要根据一个labelId(标签id)获取到一个知识列表,需要包含t1.id,t2.title 并对t2.title的首字母正序排序

下面是我的sql:奇慢无比
select t1.id_ ,t2.title from ynso_km_know as t1
INNER JOIN ynso_km_know_version as t2
on t1.latestVersionId=t2.id_
INNER JOIN ynso_km_know_label_relation as t3
on t2.id_=t3.versionId
where t3.labelId='b6fa87a5-e520-4bba-a8db-09ecb7f14414'
order by convert(t2.title USING gbk) COLLATE gbk_chinese_ci asc limit 0,10

哪位好心人帮帮忙帮忙看下~~~感激不尽
展开
 我来答
chinawflqw
2015-01-24 · TA获得超过170个赞
知道小有建树答主
回答量:477
采纳率:50%
帮助的人:363万
展开全部

你这个慢是因为三个表中所有的数据都去进行关连,然后再选出符合条件的一条。可以优化到先从t3里取出符合条件的一条,然后再去关连t1和t2。

select t1.id_ ,t2.title from 

(select * ynso_km_know_label_relation WHERE labelId='b6fa87a5-e520-4bba-a8db-09ecb7f14414') as t3 

right JOIN ynso_km_know_version as t2 on t2.id_=t3.versionId 

right JOIN ynso_km_know as t1 on  t1.latestVersionId=t2.id_

order by convert(t2.title USING gbk) COLLATE gbk_chinese_ci asc  limit 0,10
追问
非常感谢你的回答,虽然你给的sql还是查询出来的不符合我的需求,但是根据你的思路我已经把我自己写的优化成功了~~~ 感谢感谢~~~
追答
有效果就好!
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式