我的社区网站将通过注册表格向居民进行注册,该注册表格将包含三个阻止,楼层编号和门号的列表框。
我的第一个问题是 - 由于我需要检索某些操作的公寓号,将三个字段存储在三个不同的列中会减慢数据/报告的检索速度吗?将另一个字段添加到存储连接值的表并将其用于检索是否更好?
我的第二个问题是:如果我要进行连接路由,是否在发送到数据库之前连接它们(在处理php中)或者如果我将表中的列设置为使得表中的三个值并执行了concat?
修改
根据回复,一点点解释可能会增加价值:
我的表格/表格仅供会员提出意见和建议。查询表可能是:
因此,实际上,查询可以是单个公寓号码或块名称。我已经有一个检查投诉状态表单,它单独使用三列,这不是问题,因为它涉及检索单个记录。例如,如果在B区块报告中有30条记录出现怎么办?还是一百?在这种情况下,检索的连接是一个问题吗?
答案 0 :(得分:0)
Q 会将三个字段存储在三个不同的列中,从而减慢数据/报告的检索速度吗?
A 不,只要数据类型合适,它就不会减慢检索速度。 (使用INT或VARCHAR,而不是长的CHAR。如果您在检索它们时更容易处理连接的值,那么请在检索时进行连接。
SELECT CONCAT(t.block,'|',t.floor_number,'|',t.door_number) AS apartment_number
这不会减慢任何事情。
另一方面,如果您不需要查询或更新这些单独的字段,并且您将始终只处理apartment_number ...那么您可以为apartment_number创建一个列。
如果您需要从apartment_number解析各个字段,性能会变慢。例如,如果您需要检索门号组件是偶数的行,或者楼层号大于1的行......那就是事情会变慢的时候。
我会将它们存储为单独的字段,因此如果需要,我可以访问各个组件。例如,我可以回答问题,比如3号楼2楼的门号是多少?