Copying to tmp table 问题求解。。。

2014-07-15 17:38:55 +08:00
 Jack
MYSQL查询语句:

SELECT t_ID,t_date_last,t_content,sub_ID,sub_name,u_name,u_pic FROM t1,sub2,user3 WHERE t_type = 't' AND t_status = '0' AND t_sid = sub_ID AND u_ID = t_user ORDER BY t_date_last DESC LIMIT 30

从三个表里读取数据,t1表共 100768 行32.5 MB,sub2表共 1055 行939.1 KB,user3表共 10696 行1.2 MB

查询花费 1.8137 秒 其中 Copying To Tmp Table 1.7 s

尝试了tmp_table_size=209715200 无效

t_type t_status t_sid sub_ID u_ID t_user t_date_last 全部索引。。。

主机是Linode 1024

求解~~~
4935 次点击
所在节点    MySQL
8 条回复
noahzh
2014-07-15 18:05:52 +08:00
因为你使用了order by.
去掉order by 会好很多
而且,你的索引重复度会特别高,索引已经没有意义了.
Jack
2014-07-15 19:02:25 +08:00
@noahzh 确实快了。。。。但是排序的问题没法解决啊。。。 :(
SoloCompany
2014-07-15 21:41:29 +08:00
用desc来找问题啊
Jack
2014-07-16 09:04:51 +08:00
@SoloCompany 啊?~~ 怎么整呢。。。
yangqi
2014-07-17 06:21:23 +08:00
@Jack 把explain贴出来
Jack
2014-07-17 11:14:12 +08:00
@yangqi 这里。。。求帮助~~

id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE sub2 ALL PRIMARY NULL NULL NULL 1055 Using temporary; Using filesort
1 SIMPLE t1 ref t1_sid,t1_user,t1_status,t1_user_2,t1_user_3,t1_user_4 t1_sid 8 database.sub2.sub_ID 11 Using where
1 SIMPLE user3 eq_ref PRIMARY PRIMARY 8 database.t1.t1_user 1
yangqi
2014-07-17 11:27:29 +08:00
explain下面的语句, 多表查询最好用join, 你那种select where是很老的用法, mysql优化器不一定能正确使用索引

SELECT t.t_ID,t.t_date_last,t.t_content,t.sub_ID,s.sub_name,u.u_name,u.u_pic FROM t1 t
LEFT JOIN sub2 s ON s.sub_ID=t.t_sid
LEFT JOIN user3 u ON u.u_ID=t.t_user
WHERE t_type = 't' AND t_status = '0'
ORDER BY t.t_date_last DESC
LIMIT 30
Jack
2014-07-18 23:30:17 +08:00
@yangqi 貌似速度确实有提示,感谢!

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/122772

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX