我有这个分类网站,我在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正在评论它是错误的等等.你怎么看?
谢谢
非常不同意marr75.首先,如果您在大多数查询中使用这种差的技术,那么几乎每个查询都会增加不必要的负担.数据库查询也需要编写,并且可能已经过优化,因为如果您使用已知的差技术原因,以后再次尝试bnack并重写数据库中的每个查询都非常痛苦.数据库中的重构很难并且在设计中必须考虑性能,使用已知从一开始就提高性能的技术并不是过早的优化,这是一个很好的设计.
接下来,您有维护问题.如果您依赖于特定顺序的这些列,并且有人更改了数据库的结构,那么您就不喜欢了.Alos,如果有人添加了一个您不想向用户显示的列(这很常见),那你就不走运了.这是一个非常糟糕的技术,选择*应该几乎不会在生产系统中使用.如果有人添加了一个列,它将在查询中返回,但您需要知道添加了什么以及为什么要使接口执行它需要做的事情,因此使用这种糟糕的技术不会节省任何维护费用.