【问题标题】:MySQL view taking foreverMySQL 视图永远占用
【发布时间】:2014-08-01 20:58:02
【问题描述】:

MySQL 服务器 5.6

innodb_buffer_pool_size = 6GB
key_buffer_size = 20M

这是我的架构:

TBL_1    TBL_2    TBL_3    TBL_4    TBL_5    TBL_6
id       id       id       id       id       id      (int, primary key, auto increment)
uid      uid      uid      uid      uid      uid     (varchar 100, key index)
dev      dev      dev      dev      dev      dev     (varchar 80)
intf     intf     intf     intf     intf     intf    (varchar 100)
stat1    stat2    stat3    stat4    stat5    stat6   (float, 11)

uid 字段提供跨表行的唯一关系。 所有表的 count(*) 约为 52K

我想要的视图:

VIEW_1
dev   intf   stat1   stat2   stat3   stat4   stat5   stat6

这是我迄今为止尝试过的视图选择 sql 示例:

select a.dev, a.intf, a.stat1, b.stat2, c.stat3, d.stat4, e.stat_5, f.stat_6
from TBL_1 a
inner join TBL_2 b on b.uid = a.uid
inner join TBL_3 c on c.uid = a.uid
inner join TBL_4 d on d.uid = a.uid
inner join TBL_5 e on e.uid = a.uid
inner join TBL_6 f on f.uid = a.uid

一旦超过 2 个连接,查询就会变得无响应。对于上面的查询说明返回

|| *id* || *select_type* || *table* || *type* || *possible_keys* || *key* || *key_len* ||    *ref* || *rows* || *Extra*               ||
|| 1    || SIMPLE        || e       || ALL    || uid             ||       ||           ||          || 51391  ||                       ||
|| 1    || SIMPLE        || c       || ref    || uid             || uid   || 102       || db.e.uid || 1      || Using index condition ||
|| 1    || SIMPLE        || a       || ref    || uid             || uid   || 102       || db.c.uid || 1      ||                       ||
|| 1    || SIMPLE        || b       || ref    || uid             || uid   || 257       || db.c.uid || 1      || Using index condition ||
|| 1    || SIMPLE        || f       || ref    || uid             || uid   || 257       || db.c.uid || 1      || Using index condition ||
|| 1    || SIMPLE        || d       || ref    || uid             || uid   || 102       || db.e.uid || 1      || Using index condition ||

对如何改进有什么建议吗?

【问题讨论】:

    标签: mysql views multiple-columns multiple-tables


    【解决方案1】:

    检查查询的解释计划

    EXPLAIN SELECT * from ABC;
    

    查看Understanding the Query Execution Plan

    根据解释的输出考虑添加indexes或使用其他Optimizing techniques

    如果这不能帮助粘贴您的解释计划以进一步查看。

    干杯!!

    【讨论】:

    • 也许你错过了,但我在底部包含了优化器执行计划。干杯并感谢您的关注!
    猜你喜欢
    • 1970-01-01
    • 2014-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多