如何为动态生成 Select 语句的 30 列表创建索引
Posted
技术标签:
【中文标题】如何为动态生成 Select 语句的 30 列表创建索引【英文标题】:How to create index for table having 30 columns where Select statement is generated dynamically 【发布时间】:2011-02-11 03:26:29 【问题描述】:我有一个包含语言翻译的表格。它有 30 列,支持 30 种语言。
我的要求是从所有列中搜索特定单词(比如“你好”)。
我动态创建 Select 语句:
从语言中选择 * 其中英语=“你好” 或法语 = “你好” 或德语 = "你好"
中的语句是动态生成的。
如果我必须索引这样的表,我该怎么做?
我必须为所有 30 列创建一个索引还是为每列创建单独的 30 个索引?
请提出更好的选择。
【问题讨论】:
【参考方案1】:您不应该有 30 列,您应该使用包含语言名称列、单词列和 id 将 30 行关联在一起的表。然后你可以简单地查询WORD = 'hello'
。
如果您绝对必须保留 30 列,则需要创建 30 个索引,查询的性能将比需要的慢 30 倍。
【讨论】:
感谢您的建议。我明白你在说什么,但由于某些架构问题,我们无法做到这一点……现在我们有 30 列要处理……有没有办法解决这个问题? 这是一个更聪明的方法。您的查询会更快,并且您会受到字段数量的限制。 正如@amccausl 建议的那样,您可以更改基础表结构,并为系统的其余部分呈现类似的 30 列结果。 如果我只索引 id 列而不是索引所有 30 列会发生什么?这会提高我的搜索性能吗? 如果你只索引 id 列,那么只查询 id 列会很快。【参考方案2】:我将创建第二个包含 [id, lang, value] 的表,并按 id 和 value 对其进行索引。您可以设置一个视图来复制您正在使用的表,反之亦然,并索引视图
【讨论】:
【参考方案3】:如果您必须拥有全部 30 列,则需要单独索引每一列。
【讨论】:
当我使用 Select 语句进行查询时,这会提高搜索性能吗? 与在没有索引的情况下查询它相比?是肯定的。不过插入行会更慢。以上是关于如何为动态生成 Select 语句的 30 列表创建索引的主要内容,如果未能解决你的问题,请参考以下文章
当下一个方法应该返回两个生成器的值时,如何为类创建下一个方法?