|
|
1
2
在Oracle 10中:
这将使用新选择的索引。
您将需要尽可能多的索引
AN的存在
如你所见,在我不太快的机器上(
|
|
2
2
你可以使用 Tom Kyte's runstats package 比较不同实现的性能——每个实现在一个循环中运行1000次。例如,我只是将like与substr进行比较,它说like更快,大约占用了substr时间的80%。 请注意,“col like'%xxx%'”不同于“substr(col,5,3)='xxx'”。类似的情况是:
对每个要忽略的前导字符使用一个“u”。 我认为无论你用什么方法做,结果都是相似的——它总是涉及到一个完整的表(或者可能是完整的索引)扫描。只有在创建索引时知道子字符串的偏移量,基于函数的索引才会有帮助。 当你说“每隔几秒钟删除一次”时,我相当担心。这确实表明某个地方存在设计缺陷,但不知道需求,很难说。 更新: 如果您的列值类似于“key1=abc,key2=def,keyn=ghi”,那么您可以考虑添加另一个这样的表:
向上拆分键值并将其存储在此表中,如下所示:
(例如,这可以在主表的after insert触发器中完成) 那么您的删除可能是:
|
|
|
3
1
你能提供更多的信息吗? 您是在查询字符串列的任意子字符串,还是在列中的字符串存储区中有一些语法允许进行一些预处理以最小化重复工作? 您是否已经对三个选项进行了时间测试,以确定它们在您查询的数据上的相对性能? |
|
|
4
1
我建议重新考虑你的逻辑。 检查字符串的长度是否为>0而不是字符串,而不是查找字符串所在的位置,可能会更快。 您可以使用Oracle中的translate函数将所有非字符串字符转换为空值,然后检查结果是否为空值。 |
|
|
5
1
单独回答对表格设计的意见。 您至少不能有一个键/值结构,因此,与其将其存储在单列中,“key1=abc,key2=def,keyn=ghi”,不如使用类似的子表
然后,您可以对键和值创建一个索引,您的查询就简单多了(因为我认为您实际上是在寻找给定键值的精确匹配)。 有些人可能会评论这是一个可怕的设计,但我认为它比你现在拥有的要好。 |
|
|
6
0
如果您总是要查找相同的子字符串,那么使用instr和基于函数的索引对我来说是有意义的。你也可以这样做,如果你有一个小的常数子串集,你将要寻找,创建一个联邦调查局为每一个。 Quassnoi的regexp想法看起来也很有希望。我还没有在Oracle中使用正则表达式。 我认为甲骨文将是另一种方式。关于这方面的信息 here |
|
|
7
0
不确定是否要改进现有的安装工具,但Lucene(全文搜索库;移植到许多平台)确实能起到帮助。将索引与数据库同步有额外的负担,但是如果在某些编程语言中有任何类似于服务层的东西,这将成为一项简单的任务。 |
|
|
8
0
|
|
|
Johnny T · 基于当前值的SQL合并表[重复] 1 年前 |
|
John D · 需要为NULL或NOT NULL的WHERE子句 1 年前 |
|
ojek · 如何对SQL结果进行分组和编号? 1 年前 |
|
|
senek · 如何在PL/SQL中将选择结果(列)放入数组中 1 年前 |
|
|
Sax · 规范化Google表格(第一步) 1 年前 |
|
|
Jatin · 检索卷计数的动态sql抛出错误语法错误[关闭] 1 年前 |
|
|
Andrus · 如何在sql中查找第二个匹配项 1 年前 |