2008-09-17 87 views
7

我一直生病疲憊搜索Sybase ASE上區分大小寫搜索的搜索解決方案(Sybase數據/列名區分大小寫)。 Sybase文檔自豪地表示,只有一種方法可以執行使用Upper和Lower函數的搜索,但是這種說法存在性能問題。並且相信我他們是對的,如果你的桌子有大量數據,表現非常尷尬,你永遠不會再使用Upper和Lower。我對開發商的問題是:你們如何解決這個問題?在Sybase上對大小寫不敏感的搜索

P.S.不要建議更改排序順序或請移動到任何其他數據庫,在現實世界中開發人員不控制數據庫。

回答

1

如果您無法更改數據庫的排序順序(最佳選項),則未知案例字段上的索引將無濟於事。有一種方法可以做到這一點,並保持性能,如果字段的數量是可管理的。您創建一個額外的列MyFieldLower。您可以使用觸發器將該字段填充爲小寫的MyField。

然後查詢是: WHERE MyFieldLower = LOWER(@MySearch)

這將使用索引。

3

嘗試創建一個functional index,像

Create Index INDX_MY_SEARCH on TABLE_NAME(LOWER(@MySearch) 
2

在SELECT語句添加額外的大寫或小寫列。例如:

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