mysql in order by 怎么优化

jxzhoujian 发布于 2012/07/11 14:33
阅读 826
收藏 0

表结构

动态表 id  u_id  title cotnent.....

用户表id username .....

关系表id u_id to_uid...

要求:查询动态里我关注的人的最新动态

自然就会出现select * from 动态 where u_id in(select to_uid from 关系表 where u_id=自己) order by create_time desc limit 10

这个时候 u_id create_time只能用到其中一个索引

要怎么优化啊

以下是问题补充:

@jxzhoujian:就算把子查询的改成具体的u_id 速度还是慢啊 怎么办啊 (2012/07/11 14:42)
加载中
0
红薯
红薯
排序没什么优化的,先把你的子查询干掉吧,用 JOIN
mahone
mahone
红薯能说说为什么子查询没有join给力?join是不是要做笛卡儿积?效率会高?
红薯
红薯
回复 @jxzhoujian : 不把子查询去掉,你再怎么优化都不给力
jxzhoujian
jxzhoujian
不给力啊
0
宏哥
宏哥

楼主的SQL写得很好,在任何一个真正的数据库,哪怕是mssql express都能执行的闪电一样快

问题出在mysql上

宏哥早就说过 -- mysql不是数据库, 这个才是问题的根源

每天OSC上的mysql 问题都像电线杆的牛皮癣一样

要彻底根治mysql 牌牛皮癣,只有割掉这个脓包

弄一个真正的数据库, 要么就让mysql弄你,直到把你弄脑残为止.

宏哥
宏哥
回复 @jxzhoujian : 无数类似的问题, 在mysql上都没有解决办法.除非你把数据放单表里面. 在任何其他的数据库,你的写法不仅是正确的,也是完美的.
jxzhoujian
jxzhoujian
换数据库 不太好不 目前只能先让mysql弄我
0
man-zone
man-zone
不要用in
w
wangqimin
用inner Join 关联哦
man-zone
man-zone
回复 @jxzhoujian : 链接查询不是也可以的嘛
jxzhoujian
jxzhoujian
不用in能用什么
0
w
wangqimin

 select * from 动态  t1 inner join 关系表 t2 on t1. u_id =t2.u_id order by create_time desc limit 10

返回顶部
顶部