2014-01-30 117 views
0

我在想,如果使用Jquery的自動完成功能,假設使用單個列名稱的約500,000行記錄集會更快。PHP字符串比較與Mysql Like%

將行存儲在memcache中並從PHP中取出內存並進行字符串比較。

使用mysql並對搜索項執行類似的'%%'。

+2

@PeeHaa但更加微不足道的張貼到SO並使其他人測試:p –

+1

你從memcached中取出一個「%foo%」的值? Memcached很好..作爲* cache *,不作爲查詢源。 – user2864740

+1

@DigitalChris希望有人已經做到了,並且可以發佈結果 – endyourif

回答

-1

像這樣的問題是不可能猜到的。說,我猜想選項2會更快。

我不會做出決定,直到我已經嘗試過,甚至然後我會試着拿出第三個選擇。

+1

這是一條評論,不是答案 – 2014-01-30 22:43:37

1

「PHP解決方案」聽起來有點像重新實現SQL查詢過濾器 - 只是公平的,你需要適當地使用strpos而不是簡單的相等。

與SQL/LIKE查詢,或一般真正的查詢,是making sure that they are able to utilize indexes最重要的事情 - 這通常意味着限制foo%過濾器,building a de-normalized reverse index,使用「全文」(MySQL的本身只能做前綴通配符),或者只是全表掃描可以。

期望 SQL是更快的整體 - 雖然不知道確切的唯一方法是創造實際使用條件下一個業績比較基準/ profile文件 - 因爲,即使使用全表掃描,更少的數據必須被傳送(並且PHP方法聽起來不像使用巧妙的解決方案)。

另一方面,memcached對於緩存這樣一個SQL/LIKE查詢的結果很有用:假設查詢被限制爲根據過濾器值存儲在memcached中的100個結果。

如果/當相同的過濾器來自客戶端,memcached根據確切鍵找到一個條目並且不需要去SQL所發現的緩存條目已經被底層SQL/LIKE查詢過濾,因此可以是直接返回。 (然後,它只是一個遊戲,確保緩存只處理可能在不久的將來再次查詢的信息。)