查询时间超过两秒

Posted

技术标签:

【中文标题】查询时间超过两秒【英文标题】:Query takes more than two seconds 【发布时间】:2016-04-27 19:50:29 【问题描述】:

我有一个超过 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

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

【问题讨论】:

您在voucher_customer_idvoucher_date 上有索引吗?如果该列已编入索引,则使用该列查找数据会快得多。 由于您总是查询相同的两个字段,因此组合索引将大大加快处理速度:在 ...id 和 ...date 上设置两个不同的索引并没有太大帮助。 非常非常感谢你......现在它的粘性不到 0.05 秒再次感谢你 【参考方案1】:

您需要使用 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

【讨论】:

【参考方案2】:

为凭证_日期创建另一个索引

【讨论】:

这没有提供问题的答案。要批评或要求作者澄清,请在他们的帖子下方留下评论。 - From Review @chris,对不起,克里斯,但我认为这是一个答案,而且我认为这是正确的答案,另一方面,这不是批评,我不要求澄清。也许这听起来很“粗鲁”,因为它很短,但这不是我的本意,英语不是我的母语。

以上是关于查询时间超过两秒的主要内容,如果未能解决你的问题,请参考以下文章

页面响应时间超过两秒,cpu爆满,内存超过75%,nginx的access日志中出现ab攻击

页面响应时间超过两秒,cpu爆满,内存超过75%,nginx的access日志中出现ab攻击

查询花了将近两秒但只匹配两行 - 为什么索引没有帮助?

Android:单击返回和双击退出应用的监听实现

Android:单击返回和双击退出应用的监听实现

vue进入页面两秒后转盘转动