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

什么';在Mysql中处理多个索引时,这是最好的策略,mysql,database-indexes,Mysql,Database Indexes,所以我正在创建一个有多个主题的网站,人们在这些主题中发布内容,人们可以对内容进行评论。人们也可以评论评论,但只有一个层次的深度。因此将有注释和子命令,而没有其他内容。子注释上的所有注释将作为主注释的子注释列出。我不喜欢20个级别的深度评论,每个级别都有缩进标记。它破坏了我页面的外观 现在我想到这里的3张桌子。一个包含内容编号和主题编号的内容表。带有注释编号、内容编号和主题编号字段的注释表。包含子条目号、注释号、内容号和主题号的子条目表 现在,我正在考虑在subcent表中分配索引时,我的最佳策略

所以我正在创建一个有多个主题的网站,人们在这些主题中发布内容,人们可以对内容进行评论。人们也可以评论评论,但只有一个层次的深度。因此将有注释和子命令,而没有其他内容。子注释上的所有注释将作为主注释的子注释列出。我不喜欢20个级别的深度评论,每个级别都有缩进标记。它破坏了我页面的外观

现在我想到这里的3张桌子。一个包含内容编号和主题编号的内容表。带有注释编号、内容编号和主题编号字段的注释表。包含子条目号、注释号、内容号和主题号的子条目表


现在,我正在考虑在subcent表中分配索引时,我的最佳策略应该是什么。我应该单独为Subcent id指定一个索引,还是应该为Subcent id、comment id、content id和topic number分配全部四个索引?

我通常会为您可能运行查询的任何内容编制索引,特别是因为这是一个评论板,如果您希望有任何流量,不为它们编制索引可能会严重减慢注释的呈现速度

编辑:
这一决定实际上取决于你对人的因素的反应。该站点加载索引越多,加载速度就会越快,但更新速度可能会慢一些。由于多人不太可能同时更新信息,但人们通常希望先阅读,因此我会选择更快的
select
时间。

MySQL可以使用多个列索引进行查询,以测试索引中的所有列,或者只测试第一列、前两列,前3列,依此类推。如果在索引定义中按正确的顺序指定列,则单个复合索引可以加速同一表上的多种查询

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

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

州,县,邮编

你有时只按州搜索。你有时会按州和县搜索。您经常按州、县、邮编进行搜索。然后是州、县、邮编索引。将在所有三个搜索中使用

如果单独使用zip进行大量搜索,那么上面的索引将不会被使用(无论如何,SQL Server都不会使用),因为zip是该索引的第三部分,查询优化人员不会认为该索引有帮助

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


我猜您要寻找的答案是,这取决于您经常使用的查询的where子句以及您的group by。

索引过多有什么害处吗?是否有任何折衷?更多索引将加快选择,但会减慢插入、更新和删除。基本上,您只需要决定检索数据然后更新数据是否更重要。想想用例模型。在这种特殊的情况下,我会严重依赖更快的选择;您不希望人们在等待加载时离开您的站点。如果他们在评论?他们已经想被倾听。这里有一个参考: