查询需要两秒以上

时间:2016-04-27 19:50:30

标签: mysql

我的查询时间超过2秒。

这是我的表架构:

CREATE TABLE `vouchers` (
  `id` int(11) NOT NULL,
  `voucher_dealer` int(11) NOT NULL,
  `voucher_number` varchar(20) NOT NULL,
  `voucher_customer_id` int(11) NOT NULL,
  `voucher_date` date NOT NULL,
  `voucher_added_date` datetime NOT NULL,
  `voucher_type` int(11) NOT NULL,
  `voucher_amount` double NOT NULL,
  `voucher_last_debt` double NOT NULL,
  `voucher_total_debt` double NOT NULL,
  `voucher_pay_method` int(11) NOT NULL,
  `voucher_note` text NOT NULL,
  `voucher_inserter` int(11) NOT NULL
)

主键为id并自动递增。 该表有超过100万行。

查询如下所示:

select * 
from vouchers 
where voucher_customer_id = ** 
  and voucher_date between date and date 

有时它看起来像这样:

select sum(voucher_amount) 
from vouchers 
where voucher_customer_id=** 
  and voucher_date> date limit 1

有没有办法加快查询速度?

2 个答案:

答案 0 :(得分:2)

你想要使用MySQL" EXPLAIN"确定发生了什么以及为什么。

http://dev.mysql.com/doc/refman/5.7/en/explain.html

为此,只需添加" EXPLAIN"在你的陈述之前:

EXPLAIN select * 
from vouchers 
where voucher_customer_id = ** 
  and voucher_date between date and date 

它将为您提供有关可用密钥的信息,需要搜索的行数等等。

您可以使用该信息来确定其运行缓慢的原因以及如何提高速度。

一旦你运行它,你就可以使用许多在线资源解释(没有双关语)如何使用" EXPLAIN"结果。以下是一些:

http://www.sitepoint.com/using-explain-to-write-better-mysql-queries/

How to optimise MySQL queries based on EXPLAIN plan

https://www.digitalocean.com/community/tutorials/how-to-optimize-queries-and-tables-in-mysql-and-mariadb-on-a-vps

答案 1 :(得分:1)

为voucher_date创建另一个索引