使用PHP,我有一個包含Actions
表的MySQL數據庫,其中用戶可以選擇將操作分配給其網站中的某些頁面。每個這樣的賦值都會生成一個動作行,其中包含一個唯一的ActionId
以及相應頁面的URL。PHP MySQL表按字符串搜索 - 使用散列?
稍後,在特定頁面的上下文中,我想知道是否有分配給該頁面的操作,並獲取(SELECT
)適當的操作行。那時我知道我的頁面的URL,所以我可以用這個相對較長的字符串搜索Actions
表。我懷疑這不是在數據庫中搜索的最佳方式。
我假設一個更好的方法是使用某種哈希將我的長URL字符串轉換爲整數,確保沒有兩個不同的URL被轉換爲相同的整數(這裏的加密不是問題)。有這樣一個PHP函數嗎?或者,有沒有更好的策略呢?
注意我已經看到這個:SQL performance searching for long strings - 但它似乎並沒有提出一個堅實的解決方案,除了提到md5
(它散列成一個字符串,而不是整數)。
爲什麼不使用頁面ID作爲參考?另外,'VARCHAR'不應該花費那麼長時間來搜索,它是'TEXT'類型,您應該爲大量搜索而擔心。還取決於你的數據庫的大小,它可以快速或緩慢地獄。 – casraf
如果您的URL是唯一的,您可以在該列上創建一個UNIQUE索引並在其上進行搜索。 – Jon
A *正確索引*欄的搜索速度非常快,幾乎與搜索字符串的長度無關。你是否真的嘗試過它,並且在考慮這樣複雜的方案之前證明它太慢了? – deceze