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

标签 php sql mysql html database

我有这个分类网站,我在 MySql 中有大约 7 个表,其中存储了所有数据。 我有一个主表,称为“分类广告”。

在分类表中,有一列名为 classified_id。这不是 PK,也不是任何 key 。它只是一个数字,用于我将表记录连接在一起。

例如:

 classifieds table:           fordon table:
       id => 33                   id => 12
classified_id => 10             classified_id => 10
  ad_id => 'bmw_m3_92923'           

以上内容由 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')";

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

查看我几天前发布的这个问题。在评论中,HLGEM 评论说这是错误的等等。您怎么看?

Another rookie question; How to implement Count() here?

谢谢

最佳答案

强烈反对marr75。首先,因为如果您在大多数查询中都使用这种糟糕的技术,那么您实际上会为每个查询添加不必要的负载。数据库查询需要编写得尽可能优化,因为以后去尝试并重写数据库中的每个查询是非常痛苦的,因为你使用了一种已知的糟糕技术。在数据库中重构是困难的,在设计中必须考虑性能,使用已知从一开始就提高性能的技术并不是过早的优化,它是好的设计。

接下来是维护问题。如果您依赖于以特定顺序排列的这些列,并且有人更改了数据的结构,那么您就不走运了。另外,如果有人添加了一个您不想向用户显示的列(这很常见),那么您就不走运了。这是一个非常糟糕的技术, select * 几乎不应该在生产系统中使用。如果有人添加了一列,它会在查询中返回,但您需要知道添加了什么以及添加的原因,以便让界面做它需要做的事情,所以使用这种糟糕的技术不会节省维护费用。

关于php - 此查询是否获取不必要的信息?我应该更改查询吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2789021/

相关文章:

mysql - 我需要找到在分支 2 中找到、由作者 20 撰写的每本书的书籍代码和书名

PHP 正则表达式 : a Pattern to Validate the Second Level Domain

mysql - SQL根据一列中的最大值选择多列

mysql - InnoDB 设置修改对现有/新数据库的影响

mysql - 数据库 MYSQL Sum 和 Avg 自动化

MYSQL 一对多 : acessing the primary key from the fitst table, 不是第二个的 Fk

php - 正则表达式获取某个字符串后的第一个数字,后跟任何数据直到数字

php - 相似搜索和语义搜索

PhpStorm 2020.2 - 无法识别 PHP 内置函数

mysql - 如何将结果集拆分成更小的子集?