我们有一个表MySQL中,下面是模式MySql的多列索引如何工作
CREATE TABLE campaigns (
domain varchar(50) ,
campaign_id bigint(12) ,
log_time datetime ,
log_type int,
node_id bigint(12)
)
有关表的简要信息
一个域可以有多个广告活动和一个广告系列可以有多个节点
表具有1.5亿行。独特的域名是40k。
我想在这个表中创建一个综合指数来获得两个运动水平和节点级报告
如果我创建综合指数假设像下面
KEY campid_domain_nodeid_logtime (`campaign_id`,`domain`,`node_id`,`log_time`)
所做的是它完全满足以下查询这意味着无论在运动水平和节点级
活动层级报告
select count(*) from campaigns
where domain = 'aaa' and campaign_id = '1235'
and log_time between '2016-01-01 00:00:00' and '2016-02-02 00:00:00'
节点级别的报告
select count(*) from campaigns
where domain = 'aaa' and campaign_id = '1235' and node_id = '2345' and log_time between '2016-01-01 00:00:00' and '2016-02-02 00:00:00
感谢
你可以通过这个链接: http://stackoverflow.com/questions/1823685/when-should-i-use-a-composite-index –
是的,该索引将由两个查询使用,假设数据分布允许它。只要你有AND条件和相等性,索引列的顺序就是重要的.Corrections(假设WHERE条件与索引列一样多,所以第一个条件不能完全利用索引 – Mihai
我已经小提琴它:http://sqlfiddle.com/#!9/2bade9/1 它似乎使用这两个索引我管理它有点意外 – sab