2011-02-01 140 views
2

我创造笨的应用程序,它会允许任何人,无需登录,创建一个表单(使用文本框,下拉菜单,复选框,等使用不同的输入类型填写)。这种形式可能是1-100个问题,完成后将通过电子邮件发送给其他人,然后填写到网站上。高效的MySQL数据库结构

我第一次设立了我的MySQL数据库类似this post,有相当多的不同的表都只有几列。然后我编入索引并使用外键来链接信息。

从那时起,我已经改变,建立了我的数据库是这样,所以我做更少的查询:

Document 
    id, name, email, recipientname, recipientemail, document name 
Document Questions 
    document_id, question_id, question, type, comments 

是具有用更少的列,但更多的查询效率比多个表我如何做现在呢?我知道normalization扮演一个角色,但是通过让表格变得如此特别小,阻碍了表演的程度?

回答

1

从一个正常化点有事情可以做,以进一步规范你的数据(收件人可以有自己的实体和类型也可以),但它并不总是访问您的数据最优化的方式。

例如,如果拆分您的问题分为4个不同的实体(类型也很容易成为一个ENUM):

Documents 
Document Questions 
Recipients 
Types 

然后获取你将执行与查询您的应用程序的单一形式多个连接。如果您使用的是MyISAM,则在查询结束之前,您的所有四个表都会被锁定。错误连接和错误索引的查询可能会变得非常缓慢。

一个更好的替代方法是在数据库上执行四个单独的查询(添加相对于您正在运行的最常见的查询索引)检索您的数据,这样的表将保持锁定状态的时间更短的时间。

我知道这是一个极端的例子,但我会更专注于您的索引优化和打击正常化和性能之间的良好平衡。总而言之,有时完全标准化的数据意味着性能较低。

+0

谢谢jaitsu。我将添加额外的实体和类型。 – joshvermaire 2011-02-12 00:31:41