我正在为我的一个网站开发一个基于浏览器的RPG,现在我正在尝试确定组织我的SQL表以获得性能和维护的最佳方法。
这是我的问题:
SQL表中的列数是否会影响查询的速度?
对于PHP或MySQL,我不是新手。我过去常常以让他们工作为目标来开发东西,但是我最近已经进入了功能性程序不够好的阶段,除非它快速可靠。
无论如何,现在我有一个members
表,大约有15列。它包含播放器的用户名,密码,电子邮件,登录,页面浏览等信息。但是,它不包含有关玩家在游戏中进度的任何信息。如果我为军队大小,金币,转弯等等添加了列,那么它可能很容易上升到大约40或50列。
哦,我的数据库结构已经过规范化。
一个有50列不断查询的表是不是一个坏主意?我应该将它分成两个表格;一个用户的一般信息和一个用户的游戏统计信息?
我知道我可以自己检查一下查询时间,但我还没有真正创建过这些表格,而且我觉得我对这个重要决策的一些专业建议会更好。
感谢您的时间! :)
答案 0 :(得分:5)
如果您依赖表扫描或缓存表数据页面,则列数可能会产生可测量的成本。但获得良好性能的最佳方法是创建索引以协助您的查询。如果您有适合查询的索引,那么表中行的宽度几乎无关紧要。您通过比扫描表格更快的方式查找特定行。
以下是一些资源:
根据您在问题末尾的警告,您已经知道您应该测量性能并且只修复有问题的代码。不要试图过早优化。
不幸的是,没有一个适合所有规则来定义索引。需要针对您需要最快的查询自定义最佳索引集。这是一项艰苦的工作,需要进行大量的分析,测试以及对性能进行比较测量。它还需要大量阅读才能理解您的给定RDBMS技术如何使用索引。