php mysql查询优化问题

1.user表存储用户名和电话,其他表关联用户user表的主键id,展示用户的数据时(如订单),需要根据用户id获得用户名和电话,现在用的是left join,每次查询都会执行一次left join关联出需要的数据,这种方法可以吗?有其他更好的方法吗?
2.网站个人中心首页显示用户的数据的计数,如:订单5个,地址5个.这种耗时久,结果频繁变动的查询要怎么处理好呢?

1、可以关联(select name,phone user where id='XXXXXX'),先将这个人的姓名电话查出来在left join
2、用一个sql查出来,count(name),count(address)

冗余设计。可以在订单表中设计一个字段来存储用户信息(包含用户名、电话、id等)以字符串json的形式保存。这样不用每次都去left join.只是数据不一定是最新的。

1.如果不要求数据一致性(修改了信息后展示不一致)可以在订单表上 冗余用户信息,增加相应字段,如:user_name,user_phone,
如果要求数据的一致性的话,还是得用left join,只有索引建好,就不会有效率问题。这种情况需要在 order表的 user_Id上加上索引
2. 建议在user表上增加 order_Count,address_count 字段记录相应的值,每次新增、删除订单/地址时都去更新这个数值