【发布时间】:2016-01-19 19:58:11
【问题描述】:
我在 mysql 中有一个表:
CREATE TABLE `pdd_data` (
`pdd_id` INT(16) NOT NULL primary key auto_increment,
`vin` varchar(32) NOT NULL,
`time` TIMESTAMP NOT NULL,
`cmd` varchar(16) NOT NULL,
`data` varchar(128) NOT NULL
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
我在pdd_data中插入了1,000,000条记录,以后我会经常使用查询如下:
select * from pdd_data where cmd = 4599;
select * from pdd_data where vin = 400;
select * from pdd_data where vin = 400 and cmd = 4599;
目前查询时间约为1.20sec~1.90sec。谁能给我一些关于如何使这个查询更快的建议?
p.s.我使用索引创建了一个表:
CREATE TABLE `pdd_data1` (
`pdd_id` INT(16) NOT NULL primary key auto_increment,
`vin` varchar(32) NOT NULL,
`time` TIMESTAMP NOT NULL,
`cmd` varchar(16) NOT NULL,
`data` varchar(128) NOT NULL,
index idx_vin_cmd (vin(32), cmd(16))
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
但select 查询没有任何改进。
【问题讨论】:
-
您可以将索引添加到 cmd 和 vin 各个字段。试试看有没有帮助。
-
EXPLAIN命令可以帮助您优化表:dev.mysql.com/doc/refman/5.0/en/explain.html -
我想知道添加唯一约束是否有助于加快响应速度...
-
谢谢!我会试试看。
-
InnoDB 集群按主键。这会影响访问时间。因此,如果您不希望它成为主键,请不要将其设为主键。此外,除了创建适当的、小的 incides(索引 32 个字符可能太多,尝试 4 或 5 个)之外,使用适当的列类型。较小的索引和较小的固定大小数据类型更快。您似乎只使用整数
cmd和vin,但它们属于varchar类型。如果某物是整数,则列类型应为整数。
标签: mysql select optimization