【问题标题】:Mysql query performing very slowMysql查询执行很慢
【发布时间】:2013-08-14 23:47:35
【问题描述】:

我有一张大约有 20M 条记录的表,我将对该表的一些字段进行简单计算。但是获取数据需要很长时间。我正在考虑所有记录,这就是图片中没有索引的原因。 让我解释一下:

Table : UserLoginDet
        ------------ 
LoginID    INT
UserID     INT
Date       DATETIME
SpentTime  INT

现在我想要这样的仪表板总计。

SELECT COUNT(1) NoOfLogins, DISTINCT(UserID) NoOfUsers, SUM(SpentTime) UsedTime;

此查询需要 5-6 秒才能执行。好不好。我认为只有 20M 条记录非常慢。我该怎么办?

编辑: 我的解释报告:

id Select_type  table        type  possible_key  key      key_len  ref   rows    Extra
-- -----------  -----        ----  ------------  -------  -------  ---   ------  ------ 
1  PRIMARY  UserLoginDet     range PRIMARY      PRIMARY  3              797143  Using where

谢谢

【问题讨论】:

  • 是2万还是2000万?请改正错字...
  • @PinnyM,是百万
  • 全表扫描的时间似乎正常。
  • 嗨@Vatev,可以吗?我在某处读到 mysql 对数百万条记录执行计算操作非常快。

标签: mysql performance database-design mysql-workbench


【解决方案1】:

您可以运行EXPLAIN SELECT COUNT(1) NoOfLogins, DISTINCT(UserID) NoOfUsers, SUM(SpentTime) UsedTime; 来查看索引使用情况的详细报告。

【讨论】:

  • 嗨@Paolo-casciello,我已经使用解释进行了检查,并且此查询使用PRIMARY KEY 进行搜索。并在“额外”中显示“使用位置”。没事吧?
  • @ManishSapkal 你能把解释的输出添加到你原来的帖子吗?
  • 嗨@Paolo-casciello,我在帖子中添加了解释的输出
  • @ManishSapkal 是的,它使用主键。所以这是一个理想的场景。是的,时间似乎很正常。还取决于系统(操作系统、cpu、内存、缓存状态、磁盘)
猜你喜欢
  • 2016-06-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多