Sybase 上不区分大小写的搜索

发布于 2024-07-04 20:52:51 字数 275 浏览 8 评论 0原文

我已经厌倦了谷歌搜索在 Sybase ASE 上进行不区分大小写搜索的解决方案(Sybase 数据/列名称区分大小写)。 Sybase 文档自豪地表示,只有一种方法可以进行此类搜索,即使用 Upper 和 Lower 函数,但俗话说,它存在性能问题。 相信我,他们是对的,如果你的表有大量数据,那么性能会很尴尬,你永远不会再使用 Upper 和 Lower 。 我向其他开发人员提出的问题是:你们如何解决这个问题?

PS 不要建议更改排序顺序或移动到任何其他数据库,在现实世界中,开发人员无法控制数据库。

I have been sick and tired Googling the solution for doing case-insensitive search on Sybase ASE (Sybase data/column names are case sensitive). The Sybase documentation proudly says that there is only one way to do such search which is using the Upper and Lower functions, but the adage goes, it has performance problems. And believe me they are right, if your table has huge data the performance is so awkward you are never gonna use Upper and Lower again. My question to fellow developers is: how do you guys tackle this?

P.S. Don't advise to change the sort-order or move to any other Database please, in real world developers don't control the databases.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

极度宠爱 2024-07-11 20:52:55

如果您无法更改数据库的排序顺序(最好的选择),那么未知案例字段上的索引将无济于事。 如果字段数量可控,有一种方法可以做到这一点并保持性能。 您创建一个额外的列 MyFieldLower。 您使用触发器来保持字段填充为小写的 MyField。

那么查询是:
WHERE MyFieldLower = LOWER(@MySearch)

这将使用索引。

If you cannot change the sort-order on the database(best option), then the indexes on unknown case fields will not help. There is a way to do this and keep performance if the number of fields is manageable. You make an extra column MyFieldLower. You use a trigger to keep the field filled with a lower case of MyField.

Then the query is:
WHERE MyFieldLower = LOWER(@MySearch)

This will use indexing.

叹梦 2024-07-11 20:52:54

在 select 语句中添加额外的大写或小写列。 例子:

select col1, upper(col1) upp_col1 from table1 order by upp_col1

Add additional upper or lower case column in your select statement. Example:

select col1, upper(col1) upp_col1 from table1 order by upp_col1
此岸叶落 2024-07-11 20:52:53

尝试创建一个功能索引,例如

Create Index INDX_MY_SEARCH on TABLE_NAME(LOWER(@MySearch)

Try creating a functional index, like

Create Index INDX_MY_SEARCH on TABLE_NAME(LOWER(@MySearch)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文