我有一个用于存储统计信息的表格。目前,在一天结束时会填充约1,000万行,然后复制到每日统计信息表并删除。由于这个原因,我不能有一个自动递增的主键。这个数据库表的最佳索引是什么?
这是表结构:
CREATE TABLE `stats` (
`shop_id` int(11) NOT NULL,
`title` varchar(255) CHARACTER SET latin1 NOT NULL,
`created` datetime NOT NULL,
`mobile` tinyint(1) NOT NULL DEFAULT '0',
`click` tinyint(1) NOT NULL DEFAULT '0',
`conversion` tinyint(1) NOT NULL DEFAULT '0',
`ip` varchar(20) CHARACTER SET latin1 NOT NULL,
KEY `shop_id` (`shop_id`,`created`,`ip`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
我有shop_id, created, ip
的关键,但我不知道我应该使用哪些列创建最优指标,以增加查找速度进一步?
下面的查询需要,无钥匙约12秒,约1.5秒使用指数之上:
SELECT DATE(CONVERT_TZ(`created`, 'UTC', 'Australia/Brisbane')) AS `date`, COUNT(*) AS `views`
FROM `stats`
WHERE `created` <= '2017-07-18 09:59:59'
AND `shop_id` = '17515021'
AND `click` != 1
AND `conversion` != 1
GROUP BY DATE(CONVERT_TZ(`created`, 'UTC', 'Australia/Brisbane'))
ORDER BY DATE(CONVERT_TZ(`created`, 'UTC', 'Australia/Brisbane'));
您已经创建了shop_id,然后在您的where子句中单击......等等。 按相同的顺序创建索引。 – money
KEY created_shopid_click_conversion(created,shop_id,click,conversion); – money