我有一张桌子:
CREATE TABLE `activity` ( `id` int(11) NOT NULL AUTO_INCREMENT, `daten` int(11) NOT NULL, `customerid` int(11) NOT NULL, `activity` varchar(255) NOT NULL, `reference` int(11) NOT NULL, `branch` int(11) NOT NULL, `company` int(11) NOT NULL, `ad` text NOT NULL, PRIMARY KEY (`id`), KEY `customerid` (`customerid`), KEY `daten` (`daten`), KEY `activity` (`activity`)) ENGINE=MyISAM AUTO_INCREMENT=153670 DEFAULT CHARSET=latin1
CREATE TABLE `orders` ( `orderid` int(11) NOT NULL AUTO_INCREMENT, `totalov` int(11) NOT NULL, `totalprice` int(11) NOT NULL, PRIMARY KEY (`orderid`)) ENGINE=MyISAM AUTO_INCREMENT=129365 DEFAULT CHARSET=latin1
CREATE TABLE `lead` ( `id` int(11) NOT NULL AUTO_INCREMENT, `daten` int(11) NOT NULL, `customerid` int(11) NOT NULL, `cam` text NOT NULL, `resp` int(11) NOT NULL, `followupdate` int(11) NOT NULL, `status` int(11) NOT NULL, `det` text NOT NULL, `source2` text NOT NULL, `source3` text NOT NULL, PRIMARY KEY (`id`)) ENGINE=MyISAM AUTO_INCREMENT=8537 DEFAULT CHARSET=latin1
CREATE TABLE `customer` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` text NOT NULL, `idnumber` text NOT NULL, `phone` int(11) NOT NULL, `phone2` int(11) NOT NULL, `email` text NOT NULL, `address` text NOT NULL, `city` text NOT NULL, `zip` text NOT NULL, `lastid` int(11) NOT NULL, `source` text NOT NULL, PRIMARY KEY (`id`)) ENGINE=MyISAM AUTO_INCREMENT=101661 DEFAULT CHARSET=latin1
CREATE TABLE `cam` ( `id` int(11) NOT NULL AUTO_INCREMENT, `daten` int(11) NOT NULL, `name` text NOT NULL, `link` text NOT NULL, `resp` int(11) NOT NULL, `company` int(11) NOT NULL, `cat` int(11) NOT NULL, PRIMARY KEY (`id`)) ENGINE=MyISAM AUTO_INCREMENT=72 DEFAULT CHARSET=latin1
activity
有150,000条记录。
lead
有8,000条记录。
customer
有101,000条记录。
orders
123,000条记录
活动表就像客户表的日志记录。 我的意思是,我知道,因为活动表,如果客户已经在分支机构,如果他提交了一个潜在客户表格或像这样。 for analysis lead我使用这个查询:
SELECT sum(totalprice) as total from(
SELECT distinct t1.customerid, t2.reference, t3.totalprice
FROM activity t1
INNER JOIN activity t2 on t1.customerid=t2.customerid
INNER JOIN orders t3 ON t2.reference = t3.orderid
INNER JOIN lead t4 on t1.reference=t4.id
INNER JOIN cam t5 on t4.cam=t5.id
WHERE FROM_UNIXTIME(t1.daten, '%m/%y') = '$dates'
and t1.activity='lead'
and t2.activity='order'
and t1.daten < t2.daten $respquery5
and t4.resp != 72
)t
我有一个包含所有分析的页面,并且此页面有40个这样的查询。 这个页面非常慢 您对如何提高查询性能有任何建议吗?
* MySQL版本为5.1.63
*引擎是MyISAM所以我没有外键
*您是否认为如果我将引擎更改为InnoDB,这将改善加载时间?
*那么MySQL的版本呢?这会显着改善加载时间吗?
*你认为活动是一个文本字段(varchar(255))喜欢&#34; order&#34;并且int
字段没有减慢页面的速度?
*我在表格中没有索引,我也不知道如何创建索引。
这是一个非常大的小组,记录每天至少增长1000条记录。