【问题标题】:how to make my select query faster in mysql?如何使我的选择查询在 mysql 中更快?
【发布时间】: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 个)之外,使用适当的列类型。较小的索引和较小的固定大小数据类型更快。您似乎只使用整数 cmdvin,但它们属于 varchar 类型。如果某物是整数,则列类型应为整数。

标签: mysql select optimization


【解决方案1】:

我的建议是不要使用select *。而不是使用select * 使用select pdd_id, vin,time, cmd, data。这肯定会减少您的执行时间。

【讨论】:

    猜你喜欢
    • 2013-08-07
    • 2021-06-15
    • 2016-01-29
    • 2021-12-26
    • 2019-10-10
    • 2016-01-16
    • 1970-01-01
    • 1970-01-01
    • 2017-09-11
    相关资源
    最近更新 更多