在Mysql中处理多个索引时,最好的策略是什么

时间:2015-04-30 00:01:05

标签: mysql database-indexes

所以我创建了一个包含多个主题的网站,人们在这些主题中发布内容,人们可以对内容发表评论。人们也可以评论评论,但只有一个层次。所以会有评论和子评论,没有别的。关于子评论的所有评论都将列为主评论的子评论。我不喜欢20级深度评论,其中每个级别都有缩进标记。它破坏了我的页面外观。

现在我在考虑3个表格。一个内容表将包含内容编号和主题编号。带有注释编号,内容编号和主题编号字段的注释表。带有子注释编号,注释编号和内容编号以及主题编号的子注释表。

现在我正在思考在子通知表中分配索引时我的最佳策略应该是什么。我应该单独指定一个索引的子评论标识,还是应该分配一个索引的子评论标识,评论标识,内容标识和主题编号?

2 个答案:

答案 0 :(得分:2)

MySQL可以对测试索引中所有列的查询使用多列索引,或者只测试第一列,前2列,前3列等的查询。如果在索引定义中以正确的顺序指定列,则单个复合索引可以加速同一个表上的多种查询。

许多人认为我们可以根据查询中使用的列创建每个索引。但事实并非如此。但是,实际上,查询的本质应该最初指向正确的构造方式。这是最初的经验法则:

  • 如果使用“AND”条件构造“Where”每个条件中的列,则最好创建多列复合索引。
  • 如果使用'OR'条件构造'Where'每个条件中的列,最好根据每个列创建多个索引。
  • 聚簇索引应该具有唯一键(我建议使用的标识列)作为第一列。基本上它可以帮助您在索引末尾插入数据,而不会导致很多磁盘IO和页面拆分。
  • 如果您在数据上创建了其他索引,并且它们构造得很巧妙,那么它们将被重用。

e.g。想象一下你在三列上搜索一个表

州,县,邮编。

您有时仅按州搜索。你有时会按州和县搜索。你经常按州,县,邮编搜索。然后是一个带有州,县,拉链的索引。将在所有这三个搜索中使用。

如果您通过zip单独搜索,那么上面的索引将不会被使用(无论如何由SQL Server),因为zip是该索引的第三部分,并且查询优化器不会将该索引视为有用。

然后,您可以单独在Zip上创建一个索引,该索引将在此实例中使用。

我想你要找的答案是,这取决于你经常使用的查询的哪些条款以及你的小组。

答案 1 :(得分:0)

我通常会将您可能正在运行查询的任何内容编入索引,特别是因为这是一个评论板,如果您希望任何流量,不对其进行索引可能会严重降低评论的呈现速度。

编辑: 这个决定实际上取决于你对人类元素的反应。使用更多索引,站点将加载更快,但更新可能会慢一点。由于多人不太可能同时更新信息,但人们通常希望先阅读,我会依赖select更快的时间。