分▅類目錄歸檔:系統開發

PHP+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 優化ㄨ的同行提供一些幫助。

TENCENT協議的實現原◥理-通過自定義協議執行程序

通過Tencent://Message/可以打開QQ和朋友聊天,一直對他挺好奇?到底是什麽原理?
今天,我在網上找了一下TENCENT協議那么准这个时候打电话过来的實現原理,還真找到了;文@ 章請訪問:http://hi.baidu.com/kmiaoer/blog/item/799fd388ec403691a5c2723b.html
原來是在註∏冊表中修改的。
知道了原理就好辦了,我們也來寫一個

定義一個miaoqiyuan協議。實現什◥麽功能的,哦,多了,miaoqiyuan:你好。這樣來實現彈出≡對話框,彈出你好。

Windows Registry Editor Version 5.00
 
[HKEY_CLASSES_ROOT\miaoqiyuan]
@="miaoqiyuan Protocol"
"URL Protocol"="D:\\miaoqiyuan\\miaoqiyuan.exe"
 
[HKEY_CLASSES_ROOT\Smiaoqiyuan\DefaultIcon]
@="D:\\miaoqiyuan\\miaoqiyuan.exe,0"
 
[HKEY_CLASSES_ROOT\miaoqiyuan\shell]
 
[HKEY_CLASSES_ROOT\miaoqiyuan\shell\open]
 
[HKEY_CLASSES_ROOT\miaoqiyuan\shell\open\command]
@=\"D:\\miaoqiyuan\\miaoqiyuan.exe\" %1"

這樣,通過miaoqiyuan:鏈接的文件一声喝问之后都可以通過miaoqiyuan.exe打開了

下面說說怎樣來彈出對話框。

在VB中新建一╳個標準的EXE程序,新建一個按鈕,改名為Showmsg,雙擊,輸入END(點擊退出程序)

然後添加

Private Sub Form_Load()
    showmsg.Caption = Replace(Command(), "miaoqiyuan:", "")
End Sub

這樣就可以通過輸入miaoqiyuan:1234彈出1234的警告了

這樣蚁路四通八道就可用通過一個自定義的協議來執行程序了