【发布时间】:2013-02-21 14:49:00
【问题描述】:
我在 LearnBiz Simulations 工作,这是一家为管理教育领域进行模拟的自筹资金初创公司。
(a) 我们的网站目前为大约 16,000 人提供服务。目前,数据库大小为 30 mb,总共大约 90 个表,每个表可能有 5 到 50 列。我们在数据库中的所有表,都反复有新的插入、删除或更新行。但从未添加任何列。使用索引技术是否会产生任何问题?还有一些其他论坛和视频表明,即使插入或删除一行也会使索引变得无用!
(b) 我们网站上的最大工作是 mysql 查询,对 200-800 行之间的代码行进行一些处理。几乎 95% 以上的查询都有多个相等 where 子句,以查明所需的行。如果我理解正确,那么使用索引将帮助我们将流程加快数倍?
(c) 有一些模拟每分钟处理许多参与者的数据。对于此类模拟,目前我们甚至无法同时满足 50 名参与者的需求。采用索引是否有助于此类模拟承载更多用户?
(d) 我们目前拥有的服务器是带有 GoDaddy 的 VDS(每年花费约 400 美元)。为了让我们的网站更快,我们转向 DDS(每年花费大约 3000 美元)或使用 TokuDB 之类的东西是否有意义?有没有办法判断当前系统的用户容量,即服务器+数据库+编码?
【问题讨论】:
-
这太宽泛、太模糊、无法确定,无法回答。但是:如果你使用任何数据库没有索引你疯了。索引是设计合理的数据库的核心。
-
这样说吧,我调整了现有数据库以包含索引并添加 1 个中间表(大约 50 个条目)并调整了一个shite 脚本。这将其运行时间从 24 小时缩短到 5 秒。
-
索引有很大的不同(对于一个粗略的例子,我今天有一个简单的查询,不使用索引查询大约需要半秒,使用索引相同的查询大约需要 0.0001一秒)。在对索引进行排序之前,升级服务器是不值得的。使用 WHERE 子句,我假设您有很多 OR 的查询。如果是这样,通常会更快地进行多个查询(每个可能的 OR 值一个)并将结果联合起来。使用索引,如果第一次设置或有重大更改,请尝试 ANALYZE TABLE。
标签: php mysql database indexing database-optimization