在同一台機器對sphinx和mysql的查詢進行了一個對比實驗。通話記錄共有6212249條,查詢2009-01-01至2009-03-01某座席的記錄,sql如下:select SQL_NO_CACHE id from t_toll_universal where begintime >= '2009-01-01' and begintime < '2009-03-01' and agentid='xxxx
@infobird.cn'
and calldirection = 1 注意:在通話記錄表中的agentid欄位建有索引。 做了兩組實驗,第一組是100個並發,10000次請求。第二組是單個進程10000次請求。
一、單進程,請求10000次的結果資料
1.1、mysqlTime taken for tests: 139.393 secondsRequests per second: 71.74 [#/sec] (mean)Time per request: 13.939 [ms] (mean) Percentage of the requests served within a certain time (ms) 50% 14 66% 14 75% 14 80% 14 90% 14 95% 14 98% 14 99% 14 100% 16 (longest request)
1.2、sphinxTime taken for tests: 60.452 secondsRequests per second: 165.42 [#/sec]Time per request: 6.045 [ms] Percentage of the requests served within a certain time (ms) 50% 6 66% 6 75% 6 80% 6 90% 6 95% 6 98% 6 99% 7 100% 7 (longest request)
二、100個並發,請求10000次的資料結果
2.1、mysql:Time taken for tests: 103.656 seconds //總時間長度Requests per second: 96.47 [#/sec] (mean) //每秒完成請求次數Time per request: 10.366 [ms] //平均每個請求所耗時間長度(ms) Percentage of the requests served within a certain time (ms) //請求所耗時間長度分布狀況 50% 743 //百分之五十的請求在743ms之內完成 66% 927 75% 1066 80% 1227 90% 2151 95% 3665 98% 5047 99% 7054 100% 19609 (longest request)
2.2、sphinx:Time taken for tests: 59.788 secondsRequests per second: 167.26 [#/sec] (mean)Time per request: 5.979 [ms] Percentage of the requests served within a certain time (ms) 50% 26 66% 28 75% 31 80% 244 90% 355 95% 3022 98% 3169 99% 9026 100% 45253 (longest request)
三、結果分析分析之前先聲明一點,做這個實驗的機器是一台基本上廢棄了的膝上型電腦,所以資料的絕對值基本上沒有意義。在此僅對mysql和sphinx在資料查詢上的效能進行簡單的分析。
3.1、實驗不足之處a、由於硬體條件限制,可能導致mysql或者sphinx的效能沒有完全發揮b、沒有統計任務執行過程中系統資源的消耗情況c、使用無線區域網路,為了減少網路對實驗的影響,發起請求的工具ab、sphinx和mysql部署在同一台機器上
3.2、結果的簡單分析a、不論是單進程查詢還是多進程查詢,sphinx都比mysql要快近
2
倍b、比較單進程查詢和多進程查詢,sphinx表現得更平穩c、比較請求消耗的時間分布,在並發的情況下,sphinx有90%的請求在355ms內完成,而mysql是2151ms,相差近7倍
4、結論對百萬記錄層級的資料進行檢索時,使用sphinx做查詢比直接使用mysql得到較大的效能提升。