所以我创建了一个包含多个主题的网站,人们在这些主题中发布内容,人们可以对内容发表评论。人们也可以评论评论,但只有一个层次。所以会有评论和子评论,没有别的。关于子评论的所有评论都将列为主评论的子评论。我不喜欢20级深度评论,其中每个级别都有缩进标记。它破坏了我的页面外观。
现在我在考虑3个表格。一个内容表将包含内容编号和主题编号。带有注释编号,内容编号和主题编号字段的注释表。带有子注释编号,注释编号和内容编号以及主题编号的子注释表。
现在我正在思考在子通知表中分配索引时我的最佳策略应该是什么。我应该单独指定一个索引的子评论标识,还是应该分配一个索引的子评论标识,评论标识,内容标识和主题编号?
答案 0 :(得分:2)
MySQL可以对测试索引中所有列的查询使用多列索引,或者只测试第一列,前2列,前3列等的查询。如果在索引定义中以正确的顺序指定列,则单个复合索引可以加速同一个表上的多种查询。
许多人认为我们可以根据查询中使用的列创建每个索引。但事实并非如此。但是,实际上,查询的本质应该最初指向正确的构造方式。这是最初的经验法则:
e.g。想象一下你在三列上搜索一个表
州,县,邮编。您有时仅按州搜索。你有时会按州和县搜索。你经常按州,县,邮编搜索。然后是一个带有州,县,拉链的索引。将在所有这三个搜索中使用。
如果您通过zip单独搜索,那么上面的索引将不会被使用(无论如何由SQL Server),因为zip是该索引的第三部分,并且查询优化器不会将该索引视为有用。
然后,您可以单独在Zip上创建一个索引,该索引将在此实例中使用。
我想你要找的答案是,这取决于你经常使用的查询的哪些条款以及你的小组。
答案 1 :(得分:0)
我通常会将您可能正在运行查询的任何内容编入索引,特别是因为这是一个评论板,如果您希望任何流量,不对其进行索引可能会严重降低评论的呈现速度。
编辑:
这个决定实际上取决于你对人类元素的反应。使用更多索引,站点将加载更快,但更新可能会慢一点。由于多人不太可能同时更新信息,但人们通常希望先阅读,我会依赖select
更快的时间。