我已经厌倦了谷歌搜索在 Sybase ASE 上进行不区分大小写搜索的解决方案(Sybase 数据/列名区分大小写)。Sybase 文档自豪地说,只有一种方法可以进行此类搜索,即使用 Upper 和 Lower 函数,但俗话说,它存在性能问题。相信我他们是对的,如果你的表有大量数据,那么性能会很尴尬,你永远不会再使用 Upper 和 Lower。我对其他开发人员的问题是:你们如何解决这个问题?
PS 请不要建议更改排序顺序或移动到任何其他数据库,在现实世界中,开发人员不会控制数据库。
我已经厌倦了谷歌搜索在 Sybase ASE 上进行不区分大小写搜索的解决方案(Sybase 数据/列名区分大小写)。Sybase 文档自豪地说,只有一种方法可以进行此类搜索,即使用 Upper 和 Lower 函数,但俗话说,它存在性能问题。相信我他们是对的,如果你的表有大量数据,那么性能会很尴尬,你永远不会再使用 Upper 和 Lower。我对其他开发人员的问题是:你们如何解决这个问题?
PS 请不要建议更改排序顺序或移动到任何其他数据库,在现实世界中,开发人员不会控制数据库。
尝试创建一个functional index
, 像
Create Index INDX_MY_SEARCH on TABLE_NAME(LOWER(@MySearch)
在您的选择语句中添加额外的大写或小写列。例子:
select col1, upper(col1) upp_col1 from table1 order by upp_col1
如果您无法更改数据库的排序顺序(最佳选项),那么未知案例字段的索引将无济于事。如果字段的数量是可管理的,那么有一种方法可以做到这一点并保持性能。您制作了一个额外的列 MyFieldLower。您使用触发器来保持字段用小写的 MyField 填充。
那么查询是: WHERE MyFieldLower = LOWER(@MySearch)
这将使用索引。