如何解决MYSQL查询优化需要提高速度
| 我有一个包含Google Analytics(分析)数据的MySQL表:CREATE TABLE IF NOT EXISTS `analytics_data` (
`ga_profile_id` int(11) NOT NULL,`page` varchar(200) NOT NULL,`source` varchar(150) NOT NULL,`medium` varchar(50) NOT NULL,`keyword` varchar(200) NOT NULL,`bounces` int(11) NOT NULL,`entrances` int(11) NOT NULL,`exits` int(11) NOT NULL,`new_visits` int(11) NOT NULL,`page_views` int(11) NOT NULL,`unique_page_views` int(11) NOT NULL,`time_on_page` int(11) NOT NULL,`visits` int(11) NOT NULL,`date` date NOT NULL,KEY `ga_profile_id` (`ga_profile_id`,`source`,`medium`,`date`),) ENGINE=MyISAM DEFAULT CHARSET=utf8;
我有一个查询,可以根据给定时间段内的Google Analytics(分析)配置文件ID(ga_profile_id)计算访问者的总和:
SELECT
SUM( `visits` ),( UNIX_TIMESTAMP( `date` ) - 21600 ) * 1000 AS date
FROM `analytics_data`
WHERE
`date` >= \'2011-05-09\' AND `date` <= \'2011-06-08\' AND `ga_profile_id` = [...]
GROUP BY `date`
我们有450万条记录。
索引数据:
Type: BTREE
Fields/Cardinality:
ga_profile_id / 100
source / 10196
medium / 10196
date / 149893
解释选择
-ID:1
-select_type:简单
-表格:analytics_data
-类型:参考
-可能的键:ga_profile_id
-键:ga_profile_id
-参考:const
-行:219555
-额外:在哪里使用;使用临时的;使用文件排序
平均执行时间:1秒。
我们在虚拟专用服务器上,大多数查询在.0003-0.03秒内执行。长查询(我打算在某个时候进行优化)通常为0.3秒。
我试过调整键,忽略一些键,更改一些值,似乎没有任何积极的影响。考虑到这是页面上许多查询之一。
我正在考虑将MyISAM更改为内存-欢迎提出任何想法。
解决方法
您需要按此特定顺序创建复合索引
ga_profile_id + date
。这样您将获得最好的查询结果。
进一步可能的优化是预先计算每个日期的访问总和,并将其用于快速计算。
,
我有一个查询,可以根据给定时间段内的Google Analytics(分析)配置文件ID(ga_profile_id)计算访问者总数
似乎已经很优化了。在编写此答案时,您的问题中,您已经去除了查询中最有趣的部分(on4ѭ的实际子句),这在所有情况下都是最有选择性的-因此当前的索引用法。
最好的情况是,如果将索引放置在多列索引中,例如.5,您就可以利用该索引。 (date,ga_profile_id)
或其他方式,具体取决于您的使用方式和表格统计信息。
请参阅索引dos和dons。
, 运行索引将是第一个也是最简单的选择,但是如果这样做没有帮助,我建议您更多地研究一些基本的数据库管理策略,例如表分区。
, @Kerry,请看Denis的解决方案...除了他的提议,唯一的选择是在PROFILE ID FIRST(然后是Date)上建立索引,否则,您的索引将被其他在同一时间段内也有行动的人使用...
此外,@ Bohemian的归结为第二点很重要...您可能想根据完整日期/时间列结果的DATE ONLY部分进行排序。
, 如果查询中有典型的日期范围,则可以考虑对表进行水平分区。当您的大多数数据都是“过时的”并且您只在一个或多个分区上拥有所需的“新”磁盘,而在另一个分区上拥有所有这些旧磁盘时,这也可能会有所帮助。范围分区
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。