Php MySQL搜索非常慢,查询或索引错误?

Php MySQL搜索非常慢,查询或索引错误?,php,mysql,sql,performance,Php,Mysql,Sql,Performance,我们在一个应用程序中有一个非常庞大的表。很容易就有数百万行了 结构基本如下: SERIES_ID | YEAR | DAY_SINCE_EPOCH | HOUR | MINUTE | VALUE 我们有从新纪元开始的年和日的指数 问题是某些类型的查询非常慢,例如: SELECT ... WHERE SERIES_ID = 3 AND DAY_SINCE_EPOCH < 16000 AND YEAR = 2012 ORDER BY DAY_SINCE_EPOCH

我们在一个应用程序中有一个非常庞大的表。很容易就有数百万行了

结构基本如下:

SERIES_ID | YEAR | DAY_SINCE_EPOCH | HOUR | MINUTE | VALUE
我们有从新纪元开始的年和日的指数

问题是某些类型的查询非常慢,例如:

SELECT
 ...
WHERE
   SERIES_ID = 3 AND
   DAY_SINCE_EPOCH < 16000 AND
   YEAR = 2012
ORDER BY 
   DAY_SINCE_EPOCH DESC,
   HOUR DESC,
   MINUTE DESC
LIMIT 1
选择
...
哪里
序列号=3和
第_天(自_纪元起)<16000天
年份=2012年
订购人
从纪元描述开始的第天,
小时说明,
分钟描述
限制1
在一个有2米行的表中,这大约需要10秒,而在一个有18米行的表中,这远远超过20秒

目的是在16000天之前找到系列3的最后一条记录。2012年是加快查找速度的一年

所以我想知道,我们的索引设置好了吗?也许没有年度指数会更快?或者添加了序列号索引之类的东西

或者只是重新构造查询会有所帮助

任何关于如何加快搜索速度的想法都将受到欢迎

此索引可能有助于:

> create index on your_table(series_id, day_since_epoch, year);
此索引可能有助于:

> create index on your_table(series_id, day_since_epoch, year);
此索引可能有助于:

> create index on your_table(series_id, day_since_epoch, year);
此索引可能有助于:

> create index on your_table(series_id, day_since_epoch, year);
检查这些条件

SERIES_ID = 3 AND
DAY_SINCE_EPOCH < 16000 AND
YEAR = 2012
检查这些条件

SERIES_ID = 3 AND
DAY_SINCE_EPOCH < 16000 AND
YEAR = 2012
检查这些条件

SERIES_ID = 3 AND
DAY_SINCE_EPOCH < 16000 AND
YEAR = 2012
检查这些条件

SERIES_ID = 3 AND
DAY_SINCE_EPOCH < 16000 AND
YEAR = 2012


(序列号,年份,日期,自纪元起)
上尝试一个复合索引你在查询中加入了吗?没有,它只是一个普通的表,没有加入,没有外键或类似的东西。我想我会尝试一下多列索引。检查一下简单的内容,我假设这些字段是INT类型的?你的服务器是什么?您是否为MySQL服务器(my.ini文件)分配了足够的内存?请尝试在
(series\u id,year,days\u after\u epoch)
上使用复合索引。您是否在查询中加入了一些内容?不,它只是一个普通表,没有加入,没有外键或类似的内容。我想我会尝试一下多列索引。检查一下简单的内容,我假设这些字段是INT类型的?你的服务器是什么?您是否为MySQL服务器(my.ini文件)分配了足够的内存?请尝试在
(series\u id,year,days\u after\u epoch)
上使用复合索引。您是否在查询中加入了一些内容?不,它只是一个普通表,没有加入,没有外键或类似的内容。我想我会尝试一下多列索引。检查一下简单的内容,我假设这些字段是INT类型的?你的服务器是什么?您是否为MySQL服务器(my.ini文件)分配了足够的内存?请尝试在
(series\u id,year,days\u after\u epoch)
上使用复合索引。您是否在查询中加入了一些内容?不,它只是一个普通表,没有加入,没有外键或类似的内容。我想我会尝试一下多列索引。检查一下简单的内容,我假设这些字段是INT类型的?你的服务器是什么?您是否为MySQL服务器(my.ini文件)分配了足够的内存?好像查询的WHERE子句将始终保持不变?3、16000和2012?有一个交互式视图,用于查找表中的内容、呈现一周值的图表等。这不会有帮助。然后,一个计划的(每小时一次)更新程序可以解决?好像查询的WHERE子句将始终保持不变?3、16000和2012?有一个交互式视图,用于查找表中的内容、呈现一周值的图表等。这不会有帮助。然后,一个计划的(每小时一次)更新程序可以解决?好像查询的WHERE子句将始终保持不变?3、16000和2012?有一个交互式视图,用于查找表中的内容、呈现一周值的图表等。这不会有帮助。然后,一个计划的(每小时一次)更新程序可以解决?好像查询的WHERE子句将始终保持不变?3、16000和2012?有一个交互式视图,用于查找表中的内容,呈现一周值的图表等。这不会有帮助。然后一个计划的(每小时一次)更新程序可以解决这个问题?哇,这个索引完全把蜗牛变成了一只猎豹!非常感谢,巴勃罗。哇,这个指数完全把蜗牛变成了猎豹!非常感谢,巴勃罗。哇,这个指数完全把蜗牛变成了猎豹!非常感谢,巴勃罗。哇,这个指数完全把蜗牛变成了猎豹!非常感谢,巴勃罗。