我正在为媒体内容广播公司开发数据分析仪表板。即使用户点击某个频道,日志/记录也会存储到MySQL DB中。以下是存储关于频道播放时间的数据的表格。使用INDEXING优化SELECT MySql查询
这里是表结构:
_____________________________________
| ID INT(11) |
_____________________________________
| Channel_ID INT(11) |
_____________________________________
| playing_date (DATE) |
_____________________________________
| country_code VARCHAR(50) |
_____________________________________
| playtime_in_sec INT(11) |
_____________________________________
| count_more_then_30_min_play INT(11) |
_____________________________________
| count_15_30_min_play INT(11) |
_____________________________________
| count_0_15_min_play |
_____________________________________
| channel_report_tag VARCHAR(50) |
_____________________________________
| device_report_tag VARCHAR(50) |
_____________________________________
| genre_report_tag VARCHAR(50) |
_____________________________________
,我后面的仪表板图形建设的一个运行查询是:
SELECT
channel_report_tag,
SUM(count_more_then_30_min_play) AS '>30 minutes',
SUM(count_15_30_min_play) AS '15-30 Minutes',
SUM(count_0_15_min_play) AS '0-15 Minutes'
FROM
channel_play_times_cleaned
WHERE
playing_date BETWEEN '' AND ''
AND country_code LIKE ''
AND device_report_tag LIKE ''
AND channel_report_tag LIKE ''
GROUP BY
channel_report_tag
LIMIT 10
该查询基本上是采取了大量的时间来回报结果集(假设表格数据每天超过一百万条记录并且每秒增加)。我遇到了这个堆栈溢出问题:What generic techniques can be applied to optimize SQL queries?基本上提到使用索引作为优化SQL查询的技术之一。目前我很困惑如何应用索引(即在哪些列上)以优化上述查询。根据我的具体情况,如果有人能够帮助创建索引,我将非常感激。对于像我这样的初学者来说,任何其他专家意见都是值得欢迎的。
编辑:
至于建议的@Thomas G,
我试图提高自己的查询,使之更加具体:
SELECT
channel_report_tag,
SUM(count_more_then_30_min_play) AS '>30 minutes',
SUM(count_15_30_min_play) AS '15-30 Minutes',
SUM(count_0_15_min_play) AS '0-15 Minutes'
FROM
channel_play_times_cleaned
WHERE
playing_date BETWEEN '' AND ''
AND country_code = 'US'
AND device_report_tag = 'j8'
AND channel_report_tag = 'NAT GEO'
GROUP BY
channel_report_tag
LIMIT 10
你要做的列的索引,对于第一变更表结构,就在“应用,恢复”按钮,还有一个标签部分,在那里你必须选择“索引“选项卡,在此选项卡中选择要索引的列,然后应用 –
@chiragpatel”我如何应用索引“。我所问的是在哪些列上应用w.r.t我提到的查询。感谢任何关注的方式。 –
索引适用于位于where条件的列,并且如果该列数据类型为Integer,则执行速度较快。 –