【问题标题】:What special character is better for text search?什么特殊字符更适合文本搜索?
【发布时间】:2015-10-29 10:16:48
【问题描述】:

我正在使用 Sql Server 2014 Express 并且有一个 varchar(max) 列。在某些情况下,我需要使用特殊字符来为该字段赋予特殊含义。

例如,我有这个值:“123.456.234”,但我想使用类似的值:“678.*789.123”。在第二种情况下,* 表示值 789 不是标准值(我的应用程序逻辑中的标准值),而其他两个值 678 和 123 是标准值。

但我不知道当我想在查询中使用此列进行搜索时,是否使用“*”会遇到问题。我可以使用任何字符,我只想分隔字符串中特定值的含义。

非常感谢。

【问题讨论】:

  • 你应该把意思放在另一列。服务器会容易得多,并且可以使用索引。
  • 检查 SQL Server wildcard .
  • @JulienVavasseur 您无法索引 varchar(max)
  • @Frisbee 我的意思是新列上的索引,其含义不应是 varchar(max) 而是 int 或易于查询的小东西。这看起来像是一个设计问题,在搜索通配符 varchar(=> 表扫描)时会导致性能问题

标签: sql-server varcharmax


【解决方案1】:

一个字符到另一个字符的搜索速度是相同的。

如果您使用 like 那么如果您使用通配符之一,则必须对其进行转义。但 * 不是通配符。

如果这是三个不同的值,那么它们不应该在同一个条目中。查找第三范式(3NF)。

Varchar(max) 无法被索引。

【讨论】:

  • 文本是树中节点的路径,因此每个节点都有到该节点的完整路径。但是,有些节点,​​它的位置可以有不同的考虑,这会影响到子节点。所以一种避免必须搜索所有祖先来检查某人是否是特殊节点的方法,我在想你在路径中使用这个字符,所以我可以检查节点是否包含这个字符,然后有一个特殊的祖先.
  • OK 然后回到一个字符到另一个字符的搜索速度是一样的
  • 我同意,但单个交叉点中的多个值违反 1NF 而不是 3NF。 :)
  • @SeanLange 1NF 是 3NF 的一部分。
  • @Frisbee 是的,但是如果他们查看 3NF,他们将找不到有关多个值的任何信息,因为这不是 3NF 的一部分。如果满足 2NF 的所有方面,它只能是 3NF。除非满足 1NF 的所有方面,否则它不可能是 2NF。我只是想指出特定方面是 1NF 的一部分。
猜你喜欢
  • 1970-01-01
  • 2016-01-07
  • 2020-11-12
  • 1970-01-01
  • 2015-06-04
  • 1970-01-01
  • 1970-01-01
  • 2021-10-11
  • 1970-01-01
相关资源
最近更新 更多