|
|
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
|
|
|
maddy · 如何根据oracle SQL中的某一列值进行排名 2 年前 |
|
|
kiric8494 · 显示以元音开头和结尾的城市名称 3 年前 |
|
|
Franz Biberkopf · Oracle:组合子查询和聚合函数 3 年前 |
|
|
BitLauncher · 甲骨文-如何模拟位列和布尔和/或? 3 年前 |
|
|
Arifullah · 如何从oracle中的列中删除特定的初始字符? 3 年前 |
|
|
Anar · Oracle SQL用户定义函数 3 年前 |
|
|
user1312312 · 如何为一组表编写通用触发器? 3 年前 |