Php MySQL部分选择(性能问题)

Php MySQL部分选择(性能问题),php,mysql,sql,Php,Mysql,Sql,我有一个超过300000行的表(表的总大小为600mb+) 表上的行是事件的记录,每个行都有一个时间戳(历元) 要对未过期事件执行查询,我必须使用WHERE epoch>currentepoch,但执行此类查询需要5-8秒。(事实上,未过期事件的数量不超过6000) 因此,对于未过期事件的简单计数,我的查询需要5-8秒 有什么解决办法吗?我可以查询表的一部分吗?(比如忽略过期事件,让MySQL根本不去处理它们) 注:发动机为MyISAM 注2:我无法规范化该表,因为信息是描述等内容 TLDR;从

我有一个超过300000行的表(表的总大小为600mb+)

表上的行是事件的记录,每个行都有一个时间戳(历元)

要对未过期事件执行查询,我必须使用
WHERE epoch>currentepoch
,但执行此类查询需要5-8秒。(事实上,未过期事件的数量不超过6000)

因此,对于未过期事件的简单计数,我的查询需要5-8秒

有什么解决办法吗?我可以查询表的一部分吗?(比如忽略过期事件,让MySQL根本不去处理它们)

注:发动机为MyISAM

注2:我无法规范化该表,因为信息是描述等内容

TLDR;从一个300000行的表中计算6000行需要5-8秒,解决方案是什么

谢谢

更新:谢谢大家。添加索引后,查询将在不到半秒钟的时间内运行。感谢您的帮助。

为此,有一件事叫做

CREATE INDEX epoch ON tablename (epoch)
有一件事就是为了这个目的

CREATE INDEX epoch ON tablename (epoch)

应用于
where
子句中使用的列始终是一个明智的想法。

应用于
where
子句中使用的列始终是一个明智的想法。

如果从所有其他答案中还看不出这一点,您应该在
epoch
列上创建一个B树


另外,如果您还不熟悉,您应该熟悉。

如果从所有其他答案中还看不出,您应该在
历元
列上创建一个B树


另外,如果您还不熟悉,您应该熟悉。

您基本上应该为您正在WHERE子句上搜索的所有表字段创建单独的索引。组合索引(具有多个字段)应用于更复杂的查询,但请记住,索引会占用数据库空间和资源

我不确定是否可以在myISAM表上创建索引-我对MySQL不是很了解,因为我更喜欢真实的数据库;-)-但如果不能,则应将相关表转换为InnoDB格式,然后创建所需的索引

顺便说一句,您提到您的表是不可规范化的-这不可能是对的,每个表在某种程度上都是可规范化的,这取决于您想要投入的时间/精力。 有时,随着数据越来越大,这是唯一的办法,但300000行实际上并不多


祝你好运

您基本上应该为在WHERE子句上搜索的所有表字段创建单独的索引。组合索引(具有多个字段)应用于更复杂的查询,但请记住,索引会占用数据库空间和资源

我不确定是否可以在myISAM表上创建索引-我对MySQL不是很了解,因为我更喜欢真实的数据库;-)-但如果不能,则应将相关表转换为InnoDB格式,然后创建所需的索引

顺便说一句,您提到您的表是不可规范化的-这不可能是对的,每个表在某种程度上都是可规范化的,这取决于您想要投入的时间/精力。 有时,随着数据越来越大,这是唯一的办法,但300000行实际上并不多


祝你好运

如前所述,在currentepoch上使用索引。它允许表更快地搜索该列


另一种解决方案是通过cronjob将事件标记为过期,用一个值更新所有过期事件,每分钟运行一次,只搜索该值,而不是使用前面提到的

,在currentepoch上使用索引。它允许表更快地搜索该列


另一种解决方案是通过cronjob将事件标记为过期,用一个值更新所有过期事件,每分钟运行一次,只需搜索该值,而不是使用

在历元列上有索引吗?这些
历元
当前历元
是否都是表中的字段?字段是否为MySQL日期(时间)类型,它们是否有组合索引?请发布CREATETABLE语句和您的查询。如果只有
epoch
是一个字段,您有索引吗?您是否在历元列上有索引?这些
epoch
currentepoch
是否都是表中的字段?字段是否为MySQL日期(时间)类型,它们是否有组合索引?请发布CREATETABLE语句和您的查询。如果只有
epoch
是一个字段,您有索引吗?也可能对你有用,
我不确定你能不能在myISAM表上创建索引
我更喜欢超现实的数据库:)我也想知道,是否[I]ndexed[S]sequential[A]access[m]method文件是[I]ndexed;POMG,
我不确定您是否可以在myISAM表上创建索引
我更喜欢超现实数据库:)我也想知道[I]ndex[S]sequential[A]access[m]method文件是否[I]ndex;P