我最近写了一份调查应用程序,它完成了它的工作并收集了所有数据。现在我必须分析数据,我有一些时间问题。 我必须找出有多少人选择了什么选项并将其显示出来。
我正在使用此查询,这确实可以完成它的工作:
SELECT COUNT(*)
FROM survey
WHERE users = ? AND table = ? AND col = ? AND row = ? AND selected = ?
GROUP BY users,table,col,row,selected
“?”显而易见我正在使用MySQLi(在php中)在需要时获取数据,但我担心这会导致它如此缓慢。
该表由上面的所有元素组成(+一个唯一的ID),所有这些都是整数。 解释一些领域: 每项调查分为3或4个表(大小从2x3到5x5),具有1到10个幸福等级以选择形式。 (问题在表格的右侧和顶部,然后您回答问题相交的地方)
用户 - 年龄组
table,row,col - 上面解释
选择 - dooooh上面解释
现在调查已经完成,表中大约有100万个条目,查询变得非常缓慢。有时它需要3分钟,有时(我猜)时间限制到期,你根本没有数据。我也没有访问完整的数据库,只是我的空“测试”,因为客户有点偏执:S(和他的服务器似乎有点慢)
现在(在最初的论文之后)我的问题是:我故意将索引排除在外,因为在调查期间写了大量数据,这将是一个坏主意。但是由于此时没有新数据出现,为表索引所有字段是否有意义?索引从未超过10的整数有多大意义? (你可以猜到我还没有得到关于索引的线索)。我需要此表中的主要唯一ID吗?我
我在某处读到了索引可以帮助组,但只有当你按照表格中的第一列分组时(因为我的ID是第一个,从我的观点来看,无用,我可以删除它并获得任何东西吗?)
还有另一种方法来编写我的查询,它基本上可以做同样的事情但是在更短的时间内吗?
提前感谢您的所有建议!
答案 0 :(得分:2)
为“GROUP BY”或“WHERE”的条目添加索引。因此,这是一个包含用户,表格,列,行和在您的案例中选择的一个索引。
一些快速规则:
不要使用过多的索引/ indeces,因为每个索引都会使表缓慢升级 - 所以在非常大的系统上,你需要平衡查询和索引。
编辑:您是否需要GROUP BY用户,col,行,因为这些在WHERE中使用。如果WHERE已将它们过滤掉,则只需要“选择”组。