程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> 關於MYSQL數據庫 >> PHP+MYSQL運用索引實現數十萬級數據快速搜索

PHP+MYSQL運用索引實現數十萬級數據快速搜索

編輯:關於MYSQL數據庫

近期公司有個項目,是PHP+MySQL搭建的。主表記錄數大約是150萬條左右。考慮到搜索引擎收錄,做了專門針對SEO優化的,比如搜索山東+公司,關鍵字則是“山東,公司,山東公司”,標題同樣是相關的。用戶第一次搜索,則生成一條該關鍵字的記錄,以後搜索直接在搜索次數加一。專門做了一個搜索關鍵字的sitemap來優化,搜索結果每頁80條。

運營了一段時間,沒有什麼問題。最近發現很多關鍵字都是有幾十萬條記錄,就拿五金這個詞來說吧,有9萬多條記錄。點到1000頁的時候,第80000條記錄,查詢時間竟然要10秒左右。汗~難怪有客戶反映速度慢。。。。

想到了。為某些字段(比如所在城市(int),所在地區省份(int),公司id (int)所屬行業)建立索引,這樣在企業目錄中,即使到第8萬條記錄,時間也可以控制在一秒內。但是關鍵字查詢速度還是沒有解決。

現在的sql查詢速度是”select `*` from `st_company` {where} order by `coid` asc”。

忽然想到了MySQL中有個in,於是吧查詢改成了”select `co_id` from `st_company` {where} order by `coid` asc”。然後把結果用PHP組合成”1,2,3,4,5,6″的字符串,在一次二次查詢”select `*` from `st_company` where `co_id` in (1,2,3,4,5,6)”,速度一下提高了10倍左右。即使用戶搜索(使用like查詢沒有索引的co_do的時侯)的時候,第8萬條數據的時候,速度與不超過一秒。效果還不錯~

上面用減少查詢字段的方法,提高了速度,忽然想到略過前邊的字段不是能更快的加快查詢速度嗎?MySQL沒有top,可以說是一個很大的遺憾,只能用limit,這樣在優化肯定沒有上邊的速度快了。

忽然想到了百度那麼多數據,後頁是怎麼處理的呢?比如查詢“你好”,有44,700,000條記錄。修改百度get提交中的pn為10000,暈,就到76頁,及760條數據,用時0.001秒。再看Google,52,800,000 條查詢結果,最多到788條記錄,後邊就沒有了,不過Google的查詢速度竟然用到了搜索用時 2.54 秒(Google.cn),不知道他們的在干什麼?搜狗總共找到 266,212,429 個網頁,返回1000條結果,最後一頁(100頁)用時 0.034 秒。搜搜據說是Google提供的技術支持,搜索到搜索到約9,300,000項結果,返回了74頁,共738條結果,查詢時間很抱歉,也要1.8秒左右。有道搜索到符合 你好 的結果約 6400萬 條,看結果是是老大了,很可惜,只返回了50頁,500條記錄,用時0.156 秒。用時時間一官方網站上的查詢時間為准。

實際搜索結果沒有必要做那麼多,通過比較,最終決定只返回1600條記錄,20頁。sql查詢時間0.05-0.2秒左右,還可以接受。畢竟客戶如果在前10頁找不到需要的信息。很有可能更換關鍵詞了。

在此給奉Google為上的網民們說一下,Google的技術不是最好的,最起碼數據庫架構方面做得很垃圾。以前我也一直認為Google是最棒的,但是結果呢?百度,做到全國第一,你當之無愧,不過我小看了你好久。

PHP+MySQL運用索引實現數十萬級數據快速搜索一文,希望同樣給做tag 優化的同行提供一些幫助。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved