如何为动态生成 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 列表创建索引的主要内容,如果未能解决你的问题,请参考以下文章

如何为动态生成的内容编写自定义表单助手模板?

如何用SQL代码将动态查询结果赋值给变量?

当下一个方法应该返回两个生成器的值时,如何为类创建下一个方法?

如何为格式列表输出添加前缀?

生成动态SQL_insert update select 语句

如何为 Haskell STM 通道实现相当于 Go 的 select 语句?