Sybase 上不区分大小写的搜索
我已经厌倦了谷歌搜索在 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
如果您无法更改数据库的排序顺序(最好的选择),那么未知案例字段上的索引将无济于事。 如果字段数量可控,有一种方法可以做到这一点并保持性能。 您创建一个额外的列 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.
在 select 语句中添加额外的大写或小写列。 例子:
Add additional upper or lower case column in your select statement. Example:
尝试创建一个
功能索引
,例如Try creating a
functional index
, like