如何正确索引表

时间:2017-08-22 07:36:39

标签: mysql

我们使用基于where语句对表进行索引。它在我们的MSSQL天内工作正常,但现在我们正在使用MySQL并且事情是不同的。子查询的性能很糟糕。
考虑下表:

# 250K records per day
create table t_101(
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `transaction_date` datetime not null,
  `memo_1` nvarchar(255) not null,
  `memo_2` nvarchar(255) not null,
  `product_id` bigint not null,
  #many more columns

  PRIMARY KEY (`id`),
  key `index.t_101.101`(`transaction_date`, `product_id`, `memo_1`),
  key `index.t_101.102`(`transaction_date`, `product_id`, `memo_2`)
)ENGINE=MyIsam;

我存储条件值的临时表:

# 150 records
create temporary table `temporary.user.accessibleProducts`
(
    product_id bigint not null,
    PRIMARY KEY (`product_id`)
)Engine=MyIsam;

这是原始查询:

select

COUNT(a.id) as rowCount_la1,
COUNT(DISTINCT a.product_id) as productCount

from t_101 a

where a.transaction_date = '2017-05-01'
  and a.product_id in(select xa.product_id from `temporary.user.accessibleProducts` xa)
  and a.memo_1 <> '';

这个查询需要7秒钟才能执行:

select

COUNT(a.id) as rowCount_la1,
COUNT(DISTINCT a.product_id) as productCount

from t_101 a
inner join `temporary.user.accessibleProducts` b on b.product_id = a.product_id

where a.transaction_date = '2017-05-01' 
  and a.memo_1 <> ''; 

需要0.063秒才能执行..即使0.063 seconds可以接受,我也担心索引。根据上面给出的,我如何正确地索引t_101

我们使用的是MySQL 5.5.42。

0 个答案:

没有答案