日期:2014-05-16  浏览次数:20883 次

求一段SQL的优化及修改的问题.
SQL code

SELECT p.id,p.playname,p.wanfa,t.id AS tzid,t.zhid,t.idchar,t.czlx,t.wanfa,t.qihao,t.money,t.zjmoney,t.jjz,t.beishu,t.ms,t.`addtime`,t.zt AS tzzt,qh.qihao,qh.kjhm,qh.czlx,u.uid,u.username,t.uid
FROM tz AS t 
Inner Join playgroup AS p ON t.wanfa = p.wanfa 
Inner Join qihaoinfo as qh ON t.qihao = qh.qihao AND t.czlx = qh.czlx 
Inner Join username as u ON t.uid = u.uid and u.uid = '32' and 
(t.addtime >='1322064000' and t.addtime <= '1322150399')
GROUP BY t.id
order by t.id desc
limit 0,20


这段SQL还能否再进行优化?
还有一个就是t.zhid,有时候会有相同的zhid值.我想只显示一条.其它的放到点击后的页面里显示.
这个如何做呢.
我加了一个 DISTINCT(t.zhid),在上面,好象不管用..
还望高手指点一下.

------解决方案--------------------
这段SQL还能否再进行优化?
有没用上索引。EXPLAIN 分析一下。


还有一个就是t.zhid,有时候会有相同的zhid值.我想只显示一条.其它的放到点击后的页面里显示.
这个如何做呢.
GROUP BY t.id,t.zhid


我加了一个 DISTINCT(t.zhid),在上面,好象不管用..
DISTINCT要记录都雷同才排除


如果相同id数据量大的话,感觉你先分组后再内联其它表。会好些。
------解决方案--------------------
先排好序再套一下啊。然后分组。就以第一条分组了。

select * FROM (你的sql) GROUP BY zhid

探讨

引用:

这段SQL还能否再进行优化?
有没用上索引。EXPLAIN 分析一下。


还有一个就是t.zhid,有时候会有相同的zhid值.我想只显示一条.其它的放到点击后的页面里显示.
这个如何做呢.
GROUP BY t.id,t.zhid


我加了一个 DISTINCT(t.zhid),在上面,好象不管用..
DISTINCT要记录都……

------解决方案--------------------
1、你的SQL语句不是标准的;
2、将你的查询存为VIEW,假设ID唯一
select * from view1 a where not exists(select 1 from view1 where a.zhid=zhid and a.id>id)
------解决方案--------------------
先贴出你的
explain select ...
show index from ...

的结果以供分析。