-2

我在LearnBiz Si​​mulations工作,这是一家自筹资金的初创公司,为管理教育领域进行模拟。

(a) 我们的网站目前为大约 16,000 人提供服务。目前,数据库大小为 30 mb,总共大约 90 个表,每个表可能有 5 到 50 列。我们在数据库中的所有表,都反复有新的插入、删除或更新行。但从未添加任何列。使用索引技术是否会产生任何问题?还有一些其他论坛和视频表明,即使插入或删除一行也会使索引变得无用!

(b) 我们网站上的最大工作是 mysql 查询,对 200-800 行之间的代码行进行一些处理。几乎 95% 以上的查询都有多个相等 where 子句,以查明所需的行。如果我理解正确,那么使用索引将帮助我们将流程加快几倍?

(c) 有一些模拟每分钟处理许多参与者的数据。对于此类模拟,目前我们甚至无法同时满足 50 名参与者的需求。采用索引是否有助于此类模拟承载更多用户?

(d) 我们目前拥有的服务器是带有 GoDaddy 的 VDS(每年费用约为 400 美元)。为了让我们的网站更快,我们转向 DDS(每年花费大约 3000 美元)或使用 TokuDB 之类的东西是否有意义?有没有办法判断当前系统的用户容量,即服务器+数据库+编码?

4

2 回答 2

3

关于索引问题,索引不仅是可取的,而且需要“加速”事情。据我了解(用“外行”术语),索引的功能是加快表内数据的搜索和恢复。

使用索引的原因:

  1. 唯一标识每个表上的每一行(毕竟主键是索引)
  2. 索引已排序(即使数据未排序)
  3. 加快搜索和过滤速度:索引可以更快地恢复数据,因为它“保存”了数据在表中的位置(它“精确定位”了您要恢复的数据)。此外,它使数据库引擎更容易过滤数据(过滤排序数据总是比过滤数据更快更简单)
  4. 优化使用关联表时的数据恢复方式:每个外键都必须建立索引,以加快涉及主外键关系的查询

我使用一些“拇指规则”来决定哪些字段需要被索引:

  • 每个主键都有索引(很明显:主键必须是唯一的,不能为空)
  • 每个外键都必须被索引(为了使主外键关系有效)
  • 必须为我需要执行搜索的每个数字或日期字段编制索引。也就是说,我尽量避免double(或任何其他浮点数字类型)字段被索引,因为它们通常用于存储不打算搜索的值。
  • 我需要执行搜索的每个char或字段都必须被索引。varchar尽量避免在text字段上使用索引,因为它们可以包含非常大的值。
  • 避免索引二进制 ( blob) 字段...没有意义
  • 不要陷入索引所有内容的诱惑。花点时间决定哪些字段必须被索引,哪些字段不能被索引。
于 2013-03-06T17:29:21.857 回答
2

(a)那些论坛和视频毫无价值,盲目地重复半真半假(是的,使用索引时有开销,只是性能增益通常超过它很多倍)

(b) 在大多数情况下,尽管要小心创建实际有用的索引。MySQL 文档有一整章介绍了如何做到这一点(通常你也想看看整个优化章节

(c) 确保您的基准测试没有模拟过大的流量。例如,一次 50 个真实用户不会每秒产生 50 个连接。同样,在实现索引和优化查询后,您的性能应该会提高

(d) 如果您的数据库服务器配置不正确(您是否使用查询缓存?您是否允许 MySQL 使用足够的内存来将表保存在内存中?等等),那么再多的更好的资源也无济于事。

总结一下:阅读有关 MySQL 服务器的基本配置,以便它可以有效地利用您的资源(默认值通常不够好),还可以查看手册中的优化章节。

于 2013-03-06T17:27:23.787 回答