优化SQL表并查询

时间:2015-11-22 12:48:39

标签: php mysql

我有一张桌子:

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条记录。

0 个答案:

没有答案