0

我有一个正在进行中的项目,它开始时非常小并且发展得很快,因此有点失控(在组织良好和深思熟虑方面)。

无论如何,我们有一个系统可以跟踪用户活动、记录 UUIDS 以及特定的联系活动,我们使用它来生成关于客户在网站上查看的确切内容的信息。很标准。无论如何,它变得有点复杂和缓慢,我希望能帮助优化查询。

我确信有比我目前使用的更好的方法(也许使用 JOINS),但我似乎无法理解它。一些帮助将不胜感激。相关信息如下。

谢谢。

表:visitor_activity

创建表`visitor_activity`(
 `vaid` int(11) NOT NULL AUTO_INCREMENT,
 `uuid` varchar(128) 默认为空,
 `ip_address` varchar(15) 默认为 NULL,
 `datetime` 日期时间 DEFAULT NULL,
 `url` varchar(255) 默认为空,
 `user_agent` varchar(255) 默认为空,
 主键(`vaid`),
 KEY `uuid` (`uuid`),
 KEY `ip_address` (`ip_address`)
) 引擎=MyISAM AUTO_INCREMENT=70134 默认字符集=utf8

表:contact_uuids

创建表`contact_uuids`(
 `contact_id` int(11) NOT NULL DEFAULT '0',
 `uuid` varchar(128) NOT NULL DEFAULT '',
 主键(`contact_id`,`uuid`),
 KEY `contact_id`(`contact_id`),
 KEY `uuid` (`uuid`)
) 引擎=MyISAM 默认字符集=utf8

表:contact_log

创建表`contact_log`(
 `contact_log_id` int(11) NOT NULL AUTO_INCREMENT,
 `contact_id` int(11) 非空,
 `datetime` 日期时间不为空,
 `action` varchar(128) NOT NULL,
 `performed_by` varchar(64) NOT NULL,
 `ip_address` varchar(15) NOT NULL,
 主键(`contact_log_id`),
 KEY `contact_id`(`contact_id`),
 KEY `ip_address` (`ip_address`),
 KEY `performed_by` (`performed_by`)
) 引擎=MyISAM AUTO_INCREMENT=9017 默认字符集=utf8

当前 SQL 语句:

SELECT DISTINCT(`va`.`vaid`),
         `va`.`datetime`,
         `va`.`uuid`,
         `va`.`ip_address`,
         `va`.`url`
FROM `visitor_activity` `va`
WHERE `va`.`uuid` IN (SELECT `uuid` FROM `contact_uuids` `cu` WHERE `cu`.`contact_id` = '1') ||
         `va`.`ip_address` IN (SELECT DISTINCT(`ip_address`) FROM `contact_log` `cl` WHERE `cl`.`contact_id` = '1' && `performed_by` = 'Contact')
ORDER BY `va`.`datetime` DES
4

1 回答 1

1

将查询拆分为两个选择以连接不同的表,然后用于union连接所有数据。查询可能如下所示:

(SELECT   DISTINCT(`va`.`vaid`),
     `va`.`datetime`,
     `va`.`uuid`,
     `va`.`ip_address`,
     `va`.`url`
FROM     `visitor_activity` `va`,`contact_uuids` `cu`
WHERE    `va`.`uuid`=`cu`.`uuid`
and `cu`.`contact_id` = '1')
UNION
(SELECT   DISTINCT(`va`.`vaid`),
     `va`.`datetime`,
     `va`.`uuid`,
     `va`.`ip_address`,
     `va`.`url`
FROM  `visitor_activity` `va`,`contact_log` `cl`
where `va`.`ip_address` = `cl`.`ip_address` 
and `cl`.`contact_id` = '1' and `performed_by` = 'Contact')
ORDER BY datetime DESC
于 2012-06-20T21:38:47.020 回答