我有一个MySQL的InnoDB表 -性能主键
create table data (
`sha256` CHAR(64) NOT NULL,
'created` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
<some other fields>
PRIMARY KEY (`sha256`),
)
一个在mysqld_slow_query最慢的查询是
select * from data where created between "2013-02-01" and "2013-03-01";
为了提高执行力这个查询的,我有两个选项:
选项1:添加一个索引创建
选项2:创建('创建','sha256')主键,并在sha256上添加索引。
思维这里要说的是,当我们选择了大量的行,如在一个月内收集到的数据,我想,以减少被访问的B树块的数量。如果我们通过索引访问这些记录(选项1),我们仍然最终可能会为每条记录访问不同的块。相反,如果我们将按时间戳排序的记录存储为主键/聚簇键(选项2),我们将在同一个B树块中找到大量记录,这会减少磁盘读取。
但由于某些原因,而选择1提高了性能,选择2并不能改善它一样多。 任何想法为什么?还有其他建议吗?提前致谢。因为它使用集群主索引和一个CHAR(64)
使一个非常大的主键
这是一个MyISAM或InnoDB表? – 2013-04-09 21:17:07
从什么时候mysql允许你在'CREATE TABLE'命令中使用''''? – Barmar 2013-04-09 21:17:51
@G_Nugget InnoDB。 Barmar固定括号 – 2013-04-09 21:25:42