代码之家  ›  专栏  ›  技术社区  ›  migajek

MySQL-选择+连接+按性能排序

  •  2
  • migajek  · 技术社区  · 14 年前

    我有两个表,我需要从两个表中选择一些连接的数据

    SELECT f.* 
    FROM file_data f
    JOIN subscriptions s ON f.uid = s.elementid
    WHERE s.uid = 119762 AND f.private=0  
    ORDER BY f.date DESC
    

    现在,即使是一小部分数据,查询也需要一秒钟的时间。 这是由于“订阅”上使用的“文件排序”和“临时”导致的,这是由f.date之前的订单引起的(删除该条件将导致时间降到0.01s以下)

    有人能告诉我如何加快查询速度吗?

    这是解释的结果

    id  select_type    table    type   possible_keys    key            key_len  ref           rows  Extra
    1    SIMPLE         s        ref    uid_elementid    uid_elementid  4        const         171   Using index; Using temporary; Using filesort
    1    SIMPLE         f        ref    uid_uname        uid_uname      5        s.elementid   22    Using where
    
    3 回复  |  直到 14 年前
        1
  •  1
  •   JochenJung    14 年前

    你应该在f.date上做个索引

        2
  •  1
  •   Donnie    14 年前

    当一个索引将帮助一个订单是非平凡的预测。它很少像“索引 order by ". This link 有详细的细节。如果您认为您有正确的索引,而优化器只是不决定使用它们,请使用 index hint 向数据库服务器建议索引。

        3
  •  0
  •   yiitz    8 年前

    我遇到了同样的问题,这是我的解决方案:

    SELECT f.* 
    FROM (SELECT * FROM file_data WHERE `private`=0 ORDER BY `date` DESC ) f
    JOIN subscriptions s ON f.uid = s.elementid
    WHERE s.uid = 119762