我稱之爲「DataVisitorActivity」一個小桌子與此字段的Sql指數性能比較
id int auto_increment primary key,
vID int null,
category varchar(128) null,
timestamp timestamp default CURRENT_TIMESTAMP not null,
value text null,
handle text null
它有2個索引字段
handle_index(handle)
DataVisitorActivity_vID_index(vID)
,直到如今我沒有性能比較問題,以防萬一0.01秒所有的工作。 目前桌子上有2Milion entrys,它會每天變得更大(我們保存用戶在此列表中訪問的每個網站) 上次我編輯表格時唯一需要更改的是將「句柄」設置爲「文本「因爲我們真的有很長的字符串可以在這個領域得到保存。 與更改查詢我使用
SELECT COUNT(*) AS `blog_count`, handle FROM DataVisitorActivity WHERE value = "blog" GROUP BY handle ORDER BY blog_count DESC Limit 5
這個時候就需要0.1 - 0.3秒依然對我很好。
我現在看到查詢somethimes(看起來隨機)需要5到15秒執行。 我剛剛寫了一個while循環,讓它運行10次總共100次。 大約60秒在1秒以內20小於5秒,其他大於5秒。
所以我的問題是:這個查詢花了很長時間,因爲表越來越大了?爲什麼執行時間變得如此艱難?
編輯:phpmayadmin這個查詢在每次
如果您多次快速運行查詢,服務器只是將結果緩存一點,但有時表會發生變化,它必須爲您重新計算所有內容。另外如何使用COUNT(id)而不是確定使用*是否是神話般的性能問題。 – Recct
嘿@Recct我嘗試了與COUNT(id)現在相同的結果,坦克爲您的快速推薦 –
如何碎片整理你的數據庫?你多久重建一次索引?您應該儘量保持每週10%的零散度,並每週重建以獲得最佳性能。下面的答案也是很好的建議。你應該索引一個較小的數據類型 – MIKE