![]() |
1
1
您有三个选择:
重新定义问题的最简单方法是说列必须从搜索项开始(因此先丢失),然后使用索引。 另一种方法是说搜索从单词边界开始(因此“est”将匹配“estimate”,而不是“test”)。mysql(myisam)和SQL Server有这样的匹配功能。不确定Oracle是否这样做。如果没有,您可以创建一个单词查找表来搜索,而不是列本身,您可以在触发器上填充该表。 |
![]() |
2
2
不。 该查询是表扫描。如果v值是一个实际的单词,那么您很可能希望看到Oracle文本或一个简单的反向索引方案,您可以自己滚动。但事实上,这很可怕。 |
![]() |
3
2
Oracle文本涵盖了许多不同的方法,并非所有方法都是重量级的。由于您的列非常小,所以可以用CTXCAT索引对其进行索引。
与其他类型的文本索引不同,CTXCAT索引是事务性的,因此不需要同步。这样的索引占用了大量的空间,但是您必须为改进性能付出一些代价。 |
![]() |
4
1
您可以使用
下面是一个例子。 创建索引:
然后使用它,而不是:
您需要执行如下查询:
这种方法的一个显著缺点是,您需要在创建索引时了解您的'[static exp'。如果您在执行特殊查询时希望提高性能,这可能不是您的解决方案。 不过,正如函数名所示,还有一个额外的好处,那就是您有机会使用regex创建这个索引,它最终可能是一个强大的工具。当项目添加到表中时,而不是在搜索期间,将进行评估命中。 |
![]() |
5
1
|
![]() |
6
1
对于最一般的情况,如果您事先不知道您正在搜索的字符串,那么您希望得到的最佳访问路径是快速的完整索引扫描。您必须将精力集中在尽可能小的索引上,这当然可能有它自己的问题,如果数据的基数不是很高,也可以查看压缩的索引。 |
![]() |
Community wiki · SQL语法新手 1 年前 |
|
KateMak · 是否将多行中的多列与唯一id组合? 1 年前 |
![]() |
Karuna · SQL中列内的筛选器[重复] 1 年前 |
![]() |
Irvan Affandy · 为另一个选择选择声明的键 1 年前 |
![]() |
Community wiki · 这个MySQL语句出了什么问题? 1 年前 |
![]() |
Community wiki · 优化从同一表中提取的多列的查询 1 年前 |