此查询是否会获取不必要的信息?我应该更改查询吗?

6 html php mysql sql database

我有这个分类网站,我在MySql中有大约7个表,其中存储了所有数据.我有一个主表,称为"分类".

在分类表中,有一个名为classified_id的列.这不是PK,也不是关键.它只是一个用于我一起JOIN表记录的数字.

例如:

 classifieds table:           fordon table:
       id => 33                   id => 12
classified_id => 10             classified_id => 10
  ad_id => 'bmw_m3_92923'           
Run Code Online (Sandbox Code Playgroud)

以上内容由classified_id列链接在一​​起.

现在到Q,我使用这个方法来获取所有记录,其中列ad_id匹配数组中的任何值,在这种情况下称为$ ad_arr:

SELECT mt.*, fordon.*, boende.*, elektronik.*, business.*, hem_inredning.*, hobby.*
    FROM classified mt
    LEFT JOIN fordon ON fordon.classified_id = mt.classified_id
    LEFT JOIN boende ON boende.classified_id = mt.classified_id
    LEFT JOIN elektronik ON elektronik.classified_id = mt.classified_id
    LEFT JOIN business ON business.classified_id = mt.classified_id
    LEFT JOIN hem_inredning ON hem_inredning.classified_id = mt.classified_id
    LEFT JOIN hobby ON hobby.classified_id = mt.classified_id 
    WHERE mt.ad_id IN ('$ad_arr')";
Run Code Online (Sandbox Code Playgroud)

这是好还是这实际上会获取不必要的信息?

查看几天前发布的这个QI.在评论中,HLGEM正在评论它是错误的等等.你怎么看?

另一个菜鸟问题; 如何在这里实现Count()?

谢谢

HLG*_*GEM 7

非常不同意marr75.首先,如果您在大多数查询中使用这种差的技术,那么几乎每个查询都会增加不必要的负担.数据库查询也需要编写,并且可能已经过优化,因为如果您使用已知的差技术原因,以后再次尝试bnack并重写数据库中的每个查询都非常痛苦.数据库中的重构很难并且在设计中必须考虑性能,使用已知从一开始就提高性能的技术并不是过早的优化,这是一个很好的设计.

接下来,您有维护问题.如果您依赖于特定顺序的这些列,并且有人更改了数据库的结构,那么您就不喜欢了.Alos,如果有人添加了一个您不想向用户显示的列(这很常见),那你就不走运了.这是一个非常糟糕的技术,选择*应该几乎不会在生产系统中使用.如果有人添加了一个列,它将在查询中返回,但您需要知道添加了什么以及为什么要使接口执行它需要做的事情,因此使用这种糟糕的技术不会节省任何维护费用.

  • +1,浪费一小时,哦.每天浪费几十万次,哦*%$ @!不要偷懒,只返回你需要的列! (2认同)

Ken*_*eth 5

您肯定会返回不必要的结果,以回答您的问题.

进入是一个坏习惯.