是,如果有一種可能性,你可以將兩者last, first
和first last
到數據庫中,更好的方法是正確的設計架構。
如果曾經發現自己想搜索的,或以其他方式操縱,部分列,你的方案几乎可以肯定是壞。它幾乎肯定會殺死性能。
正確的方法是有這樣的表:
T1 FirstName LastName
== ========= ========
1 Pax Diablo
2 Bob Smith
3 George Jones
然後你就可以更細緻地劃分用戶輸入的域名(一次,運行查詢之前),而不是試圖每一個名字的拆分數據庫。
在該數據庫始終保持last, first
的情況下,實際上也可能沒有一個架構更改是必要的。
你在這種情況下的問題只是解釋用戶輸入的內容之一。
一種可能性,儘管它是一個性能殺手,但是對每個單獨的單詞都要做like
。因此,如果用戶輸入pax diablo
,你得到的查詢可能是:
select T1 from mytable
where T2 like '%pax%'
and T2 like '%diablo%'
這樣,你不關心順序這麼多。但是,鑑於我不喜歡慢速查詢,除非絕對必要(或者您的數據庫相對較小並且可能保持這種方式),否則我會盡量避免這種情況。
有各種各樣的方式來加快這些類型的查詢,如:使用任何全文搜索功能,你的DBMS有
- 。
- 通過在插入/更新觸發器中提取和存儲單詞(並在刪除觸發器中刪除它們)來模擬此類功能。
- 以前的情況,但也確保使用與當前列(速度)的較小的值的額外的列。
- 告訴用戶他們需要使用
last, first
表單進行搜索。
- 儘量避免
%something%
搜索字符串儘可能(與something%
,索引仍然可以使用)。
- 我以前提到「分成兩列」的方法。
肯定同意。應該提到,在這篇文章中,我意識到這是發佈之前的模式。 – Kartik 2012-08-14 03:06:50