2017-02-04 27 views

回答

1

DB喜歡或對strpos或的preg_match

你可能在你的數據庫table多行。如果您全部加載它們,然後使用strpospreg_match進行應用程序級別的篩選,那將意味着所有記錄都將從數據庫table加載到內存中,爲您的PHP代碼提供服務,並將這些代碼存儲在內存中。如果數據庫服務器與應用程序服務器不同,則所有數據都必須通過網絡或Internet路由發送。這些內存操作和數據傳輸會降低你的操作速度,因此,儘可能在數據庫端進行過濾,因爲即使由於某種原因db也是如此。操作比PHP函數稍慢,大內存操作和數據傳輸太多了。

像主場迎戰

當你正在做一個像您可以使用%通配符。如果你需要,那麼in將不會是一個選項。否則,當您使用的是這樣的:

where myfield in ('a', 'b', 'c') 

,或者你使用這樣的:

where myfield like 'a' or myfield like 'b' or myfield like 'c' 

,或者你使用這樣的:

where myfield = 'a' or myfield = 'b' or myfield = 'c' 

第一和第三個選項是相同的,但是您需要在第一種情況下輸入較少的內容,並且您可以更輕鬆地生成查詢。第二個應該更慢,因爲必須檢查通配符和東西。

strpos對比的preg_match

strpos發現在乾草堆裏sequenctially針的第一次出現,而基於圖案preg_match搜索。後者較慢,因爲它必須檢查正則表達式運算符,但它有更多的可能性,您可以搜索一個模式而不是給定的針串。