三个mysql表,怎么设计更合理,更快

三个表第一种结构
用户信息表 ( id,name,title,),
用户订单 (id,用户信息ID(一对多外键),)
用户购买商品信息(id,用户订单ID(一对多外键),)

这是我目前的表结构, 时常要做的 是通过 用户name 查询,商品信息,
我在用django framework 写的Web后端, 感觉查询速度很慢, 比查询没有外键的大表(把三个表合成一个大表)慢了2倍以上

于是我想到第二种结构

三个表第二种结构,
用户信息表 ( id,name,title,)
用户订单 (id,用户信息ID(一对多外键),)
用户购买商品信息(id,用户订单ID(一对多外键),用户信息ID(一对多外键), 这个表多加了一个外键,查询 是要读一层外键

请教各位指点一下, 有什么最优设计方案,

推荐第二种结构,总有需求需要
一张表很大的时候:
订单表可以按月分表,来限制表的大小。
查询语句尽量用主键索引(如用户id)查询,若有其它查询条件,可先用主键查询,在主键查询的出来的记录里面进行子查询。

select id,name,title fromselect id,name,title from table where id=‘’ group by xx
)where 其它条件 order by xx

结不结构的无所谓,使用单表查询是重中之重,切勿使用多表联查,那会 拖慢效率。

表一,用户信息表(ID,NAME,TITLE……)
表二,商品表(ID,商品编号,NAME……)这个是你有的,应该没有体现出来
表三,用户商品订单表(ID,订单编号,用户ID,商品IDS……)这里的商品IDS,用于存放用户购买的商品ID,以,进行分割

按照你这句话的要求这是我目前的表结构, 时常要做的 是通过 用户name 查询,商品信息,肯定是第二种的设计好些,关联的少些,只是冗余字段而已,具体的查询时间,还是需要看执行计划,结合执行计划,调整索引的建设;
关于执行计划,与索引的使用可以参考 https://github.com/yanghaiji/Advanced-books/tree/master/note/mysql

经常会用到的搜索字段,加索引,关联的时候尽量通过主键关联!