我一直在閱讀很多很好的答案,在這個網站上的時間不同的問題,但這是我第一次發佈。所以提前感謝您的幫助。mySQL查詢優化瀏覽跟蹤器
這裏是我的問題:
我有一個MySQL的表跟蹤訪問不同的網站,我們有。這是表格結構:
create table navigation_base (
uid int(11) NOT NULL,
date datetime not null,
dia date not null,
ip int(4) unsigned not null default 0,
session_id int unsigned not null,
cliente smallint unsigned not null default 0,
campaign mediumint unsigned not null default 0,
trackcookie int unsigned not null,
adgroup int unsigned not null default 0,
PRIMARY KEY (uid)
) ENGINE=MyISAM;
此表格有答案。 7000萬行(平均每天110,000)。
在我們創建的索引與下面的命令該表:
alter table navigation_base add index dia_cliente_campaign_ip (dia,cliente,campaign,ip);
alter table navigation_base add index dia_cliente_campaign_ip_session (dia,cliente,campaign,ip,session_id);
alter table navigation_base add index dia_cliente_campaign_ip_session_trackcookie (dia,cliente,campaign,ip,session_id,trackcookie);
,我們使用此表來獲得由客戶,天,活動用下面的查詢分組訪客統計:
select
dia,
navigation_base.campaign,
navigation_base.cliente,
count(distinct ip) as visitas,
count(ip) as paginas_vistas,
count(distinct session_id) as sesiones,
count(distinct trackcookie) as cookies
from navigation_base where
(dia between '2017-01-01' and '2017-01-31')
group by dia,cliente,campaign order by NULL
即使創建了這些索引,一個月的響應時間也相對較慢;在我們的服務器上約3秒鐘。
有沒有加快這些查詢的一些方法?
在此先感謝。
嗨。謝謝你快速的回覆。前段時間嘗試分區,但沒有幫助。不過我會再試一次。我所做的只是創建一個包含一個月數據的表格,因爲這可能與某個分區類似。 Te查詢時間在大表和小表中相同。問候。 –
我看到了你試過指標無分區的好處。單獨的桌子也不會更好。認爲它是這樣的:有多少_rows_需要讀(包括傳入了行),以滿足查詢。所有三種情況的答案都是一樣的。 –