我有一个正在进行中的项目,它开始时非常小并且发展得很快,因此有点失控(在组织良好和深思熟虑方面)。
无论如何,我们有一个系统可以跟踪用户活动、记录 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