V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
MySQL 5.5 Community Server
MySQL 5.6 Community Server
Percona Configuration Wizard
XtraBackup 搭建主从复制
Great Sites on MySQL
Percona
MySQL Performance Blog
Severalnines
推荐管理工具
Sequel Pro
phpMyAdmin
推荐书目
MySQL Cookbook
MySQL 相关项目
MariaDB
Drizzle
参考文档
http://mysql-python.sourceforge.net/MySQLdb.html
Jack
V2EX  ›  MySQL

Copying to tmp table 问题求解。。。

  •  
  •   Jack · 2014-07-15 17:38:55 +08:00 · 5048 次点击
    这是一个创建于 3795 天前的主题,其中的信息可能已经有所发展或是发生改变。
    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

    求解~~~
    8 条回复    2014-07-18 23:30:17 +08:00
    noahzh
        1
    noahzh  
       2014-07-15 18:05:52 +08:00
    因为你使用了order by.
    去掉order by 会好很多
    而且,你的索引重复度会特别高,索引已经没有意义了.
    Jack
        2
    Jack  
    OP
       2014-07-15 19:02:25 +08:00
    @noahzh 确实快了。。。。但是排序的问题没法解决啊。。。 :(
    SoloCompany
        3
    SoloCompany  
       2014-07-15 21:41:29 +08:00 via Android
    用desc来找问题啊
    Jack
        4
    Jack  
    OP
       2014-07-16 09:04:51 +08:00
    @SoloCompany 啊?~~ 怎么整呢。。。
    yangqi
        5
    yangqi  
       2014-07-17 06:21:23 +08:00 via Android
    @Jack 把explain贴出来
    Jack
        6
    Jack  
    OP
       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
        7
    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
        8
    Jack  
    OP
       2014-07-18 23:30:17 +08:00
    @yangqi 貌似速度确实有提示,感谢!
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3186 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 12:50 · PVG 20:50 · LAX 04:50 · JFK 07:50
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.