2012-09-18 37 views
0

,我保存了在搜索引擎搜索到的訪問者的關鍵字(例如「php performance」)。提高了在搜索引擎中每次新訪問時在varchar字段中搜索的性能

要算多久的關鍵字每天使用的次數,我需要檢查其他人是否已經搜索的特定日期的術語。

幾個月後表變得非常大和MySQL檢查的關鍵字的存在的那一天需要更長的時間和更長的時間。因此,我切換到一個額外的表格,我只保存關鍵字,併爲每個關鍵字指定一個特定的ID,只有一次檢查過程,而不是每個新的一天。這個特定的ID與我在表格中插入的關鍵詞每天的多樣化相關。

這已經工作得更好,但這個表還變得越來越大......

是否有人有這更高的性能好的解決辦法?

最佳,

弗雷迪

+0

你爲什麼不使用existi ng解決方案,如谷歌分析,或Piwik,或者這樣的? – KingCrunch

回答

1

當談到性能也有一些「技巧」可以做些什麼來改善:

  1. 構建一個緩存機制。這就是你已經做了第二張桌子。你可以進一步把這個緩存表保存在內存或memcached中。
  2. Opimize你的查詢,並確保有指標在搜索欄(或多個)。如果你這樣做,不要很舒服。
  3. 嘗試(DE)規範化數據庫。有時候,不同的數據庫結構從設計角度來看並不是最佳的,但是爲速度而優化。不知道你是否這樣做。
  4. 看看不同的解決方案進行搜索,也許看看Lucene
+0

謝謝你的回答。我有一個問題2:是否有可能通過MySQL索引varchar字段? – Freddy

+0

當然,只需添加一個像任何其他領域的索引。 – JvdBerg

0

不保存用戶輸入到數據庫中的所有關鍵字。製作表格的欄位:關鍵字,計數器

每次訪問者輸入關鍵字,您搜索FO在DB的關鍵字,增加櫃檯,如果關鍵字不存在,然後創建一個新的與計數器= 1。

還可以使用指數關鍵字列,並且不使用全文搜索,使用直的對比:

SELECT counter FROM keyword_table WHERE keyword="exact keyword" LIMIT 1; 
+0

謝謝你的回答。我幾乎做了這個額外的表,但我仍然有問題,MySQL查詢搜索varchar字段,這需要相當多的時間100000條目。 – Freddy

+0

嘗試使用char類型而不是varchar,它比varchar佔用的空間更多,但搜索速度更快。對於10萬條記錄來說不應該太慢,也許你在應用程序邏輯中做錯了。 – S3Mi

+0

我只是在phpmyadmin中運行sql,它表示需要0.10秒。 – Freddy

0

我個人不會使用MySQL作爲主要的後備存儲這些數據,我想看看以更快的速度和更高的可用性解決方案的NoSQL,可能使用MySQL作爲備份存儲...

隨着APC內置了互斥鎖,我不認爲你的號碼會被破壞,如果你的apc已經啓動並且不滿意它的計數,你需要直接訪問互斥鎖,這樣就不需要服務進程可以寫入同時作爲另一個,在我的並行線程的項目提供互斥可以發現https://github.com/krakjoe/pthreads,需要更多的幫助隨意問...