当前位置:  开发笔记 > 编程语言 > 正文

我的MySQL查询出了什么问题?

如何解决《我的MySQL查询出了什么问题?》经验,为你挑选了1个好方法。

我没有收到任何错误,因为这只是一个小问题.

EXPLAIN
SELECT
a.nid,
a.title,
a.uid,
b.parent,
b.weight,
c.name,
d.value
FROM table1 AS a INNER JOIN table2 AS b ON a.vid = b.vid AND a.status = 1
INNER JOIN table3 AS c ON c.uid = a.uid
INNER JOIN table4 AS d ON d.content_id = a.nid AND d.value_type = 'percent' AND d.function = 'average'

当我查看哪些表被引用时,一切都很好,但是从table4中它应该只选择"value"字段,我得到一个ALL被称为...

id  select_type     table   type      possible_keys                                   key     key_len   ref                   rows  Extra
1   SIMPLE          a     ref     PRIMARY,vid,status,uid,node_status_type,nid   status  4         const                 1    
1   SIMPLE          b     eq_ref    PRIMARY                                         PRIMARY 4         databasename.a.vid    1    
1   SIMPLE          c     eq_ref    PRIMARY                                         PRIMARY 4         databasename.a.uid    1   Using where
1   SIMPLE          d     ALL     NULL                                          NULL      NULL      NULL                  2     Using where

如您所见,它从决赛桌(d)中选择*.当我只需要从中选择一个字段时,为什么这样做呢?谁能帮我吗?



1> Greg..:

ALL表示所有行,而不是所有列.因为它说没有可能的密钥,我猜你没有d.content_id或d.value_type或d.function的索引.

如果您想要花哨,可以在所有这三列中添加索引.

推荐阅读
sx-March23
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有