在1000万行表(单表)中,MySQL中的SELECT查询非常慢

托马尔99

我的查询存在性能问题。这是表模式:

CREATE TABLE `file_info` (
  `FILE_NAME` varchar(255) DEFAULT '',
  `START_TIME` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `END_TIME` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
  `FILE_SIZE` int(10) NOT NULL DEFAULT '0',
  `LOG_SERVER_NAME` varchar(255) NOT NULL DEFAULT '',
  `PHASE` varchar(255) NOT NULL DEFAULT '',
  `APPLICATION` varchar(255) NOT NULL DEFAULT '',
  `TYPE` varchar(255) NOT NULL DEFAULT '',
  `FULLPATH` varchar(255) NOT NULL DEFAULT '',
  `COMPRESSED` tinyint(1) NOT NULL DEFAULT '0',
  `CLOSED` tinyint(1) NOT NULL DEFAULT '0',
  `ARCHIVED_PATH` varchar(255) NOT NULL DEFAULT '',
  `FILE_TYPE` varchar(45) NOT NULL DEFAULT '',
  PRIMARY KEY (`LOG_SERVER_NAME`,`FULLPATH`),
  UNIQUE KEY `uk_file_info` (`LOG_SERVER_NAME`,`FULLPATH`,`APPLICATION`) USING BTREE,
  KEY `IDX_STARTTIME` (`START_TIME`),
  KEY `IDX_ENDTIME` (`END_TIME`),
  KEY `IDX_PHASE` (`PHASE`),
  KEY `IDX_APLICATION` (`APPLICATION`),
  KEY `IDX_LOGSERVERNAME` (`LOG_SERVER_NAME`),
  KEY `IDX_FULLPATH` (`FULLPATH`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

这是我的查询:

SELECT * FROM FILE_INFO 
WHERE PHASE ='DEV' 
AND APPLICATION ='SIALT'
AND ((START_TIME <'2014-11-11 08:17:00' AND END_TIME >'2014-11-11 08:17:00') 
   OR (START_TIME <'2014-11-11 08:22:00' AND END_TIME >'2014-11-11 08:22:00') 
   OR (START_TIME >'2014-11-11 08:17:00' AND END_TIME <'2014-11-11 08:22:00'))

该查询需要大量时间。有时超过30秒。

我将索引放在要过滤的字段上。我之所以使用MyISAM,是因为我了解数据库没有外键会更好。

因此,我正在寻找新的想法来改善我的查询。今天几乎无法使用。

添加自动增量键会有所帮助吗?即使我不按ID进行过滤?从MyISAM更改为InnoDB?

编辑

解释给

id  1
select_type SIMPLE
table   FILE_INFO
type    ref
possible_keys   IDX_STARTTIME,IDX_ENDTIME,IDX_PHASE,IDX_APLICATION
key IDX_APLICATION
key_len 257
ref const
rows    756718
Extra   Using index condition; Using where

我将尝试其他建议并更新我的帖子。

感谢您的提示。

罗曼

托马尔99

感谢所有的建议。

我更改了索引,以将我的所有where子句都包含在主键中。这还不够。

我看到基于datetime的分区未正确使用。因此,我要做的是创建一个新的日期字段(基于start_time)。而且分区可以很好地配合日期(无时间)。

这是最后的查询:

SELECT * FROM FILE_INFO 
WHERE PHASE ='PDT' AND APPLICATION ='SIALT' 
AND FILE_DATE = '2014-12-10'
AND ((START_TIME <'2014-12-10 08:17:00' AND END_TIME >'2014-12-10 08:17:00') 
OR (START_TIME <'2014-12-10 17:22:00' AND END_TIME >'2014-12-10 17:22:00') 
OR (START_TIME >'2014-12-10 08:17:00' AND END_TIME <'2014-12-10 17:22:00'))

我猜由于某些原因,在start_time上的索引只是无法正常工作。我可以解释一下非常糟糕的表现。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在中等MySQL表(100万行)上的慢查询

来自分类Dev

在中等MySQL表(100万行)上的慢查询

来自分类Dev

在具有500万行的表中对最长前缀进行匹配的最佳MYSQL查询

来自分类Dev

在1000万行的表上优化SQL查询:无休止查询

来自分类Dev

MySQL更新300万行表中的每一行

来自分类Dev

按键自动完成对300万行表的查询

来自分类Dev

对具有100万行的表进行查询优化

来自分类Dev

查询具有5000万行的大表

来自分类Dev

最佳MYSQL查询,用于在具有500万行的表中最长的前缀匹配

来自分类Dev

MySQL大表-查询非常慢

来自分类Dev

Sql-Data 基于10+ 万行的表中的datetime 列进行清除

来自分类Dev

EF如何创建用500万行更新SQLite表中的100万行所需的SQL?它会一排更新吗?

来自分类Dev

MySQL在单个插入中插入2万行

来自分类Dev

硒中的表迭代非常慢

来自分类Dev

使用EFCore从Linq SQL查询返回8000万行表的数组

来自分类Dev

如何更快地从具有2000万行的表中选择数据的子查询

来自分类Dev

如何在大查询表中从行索引100万到200万获取记录?

来自分类Dev

如何在大查询表中从行索引100万到200万获取记录?

来自分类Dev

使用PHP(或查询)在MySQL数据库中成千上万行使用的常用单词

来自分类Dev

从2个表中选择时MySQL查询非常慢

来自分类Dev

Mysql表更新查询非常慢,并且每天都在增加

来自分类Dev

如何用 160 万行生成更快的 mysql 查询

来自分类Dev

动态行中的MySQL Pivot表查询

来自分类Dev

MySQL查询以获取表中的行位置

来自分类Dev

大表查询运行非常慢

来自分类Dev

使用FULLTEXT从大表中检索排名最高的行非常慢

来自分类Dev

从工作表中删除命令按钮和行的速度非常慢

来自分类Dev

从工作表中删除命令按钮和行的速度非常慢

来自分类Dev

mysql查询速度非常慢:左联接多个表,每个表的where子句

Related 相关文章

  1. 1

    在中等MySQL表(100万行)上的慢查询

  2. 2

    在中等MySQL表(100万行)上的慢查询

  3. 3

    在具有500万行的表中对最长前缀进行匹配的最佳MYSQL查询

  4. 4

    在1000万行的表上优化SQL查询:无休止查询

  5. 5

    MySQL更新300万行表中的每一行

  6. 6

    按键自动完成对300万行表的查询

  7. 7

    对具有100万行的表进行查询优化

  8. 8

    查询具有5000万行的大表

  9. 9

    最佳MYSQL查询,用于在具有500万行的表中最长的前缀匹配

  10. 10

    MySQL大表-查询非常慢

  11. 11

    Sql-Data 基于10+ 万行的表中的datetime 列进行清除

  12. 12

    EF如何创建用500万行更新SQLite表中的100万行所需的SQL?它会一排更新吗?

  13. 13

    MySQL在单个插入中插入2万行

  14. 14

    硒中的表迭代非常慢

  15. 15

    使用EFCore从Linq SQL查询返回8000万行表的数组

  16. 16

    如何更快地从具有2000万行的表中选择数据的子查询

  17. 17

    如何在大查询表中从行索引100万到200万获取记录?

  18. 18

    如何在大查询表中从行索引100万到200万获取记录?

  19. 19

    使用PHP(或查询)在MySQL数据库中成千上万行使用的常用单词

  20. 20

    从2个表中选择时MySQL查询非常慢

  21. 21

    Mysql表更新查询非常慢,并且每天都在增加

  22. 22

    如何用 160 万行生成更快的 mysql 查询

  23. 23

    动态行中的MySQL Pivot表查询

  24. 24

    MySQL查询以获取表中的行位置

  25. 25

    大表查询运行非常慢

  26. 26

    使用FULLTEXT从大表中检索排名最高的行非常慢

  27. 27

    从工作表中删除命令按钮和行的速度非常慢

  28. 28

    从工作表中删除命令按钮和行的速度非常慢

  29. 29

    mysql查询速度非常慢:左联接多个表,每个表的where子句

热门标签

归档