关于MySQL数据库性能问题

问题描述:

我有表包含大约1400万条记录,并且我有多个SP包含动态SQL,并且这些SP包含多个参数,并且我在我的表上构建索引,但问题是我有一个性能问题,我试图从动态SQL中获取查询并运行它,但是此查询需要30秒到1分钟,我的查询只包含从表中选择的内容,并且一些查询包含与其他表中的数值相关的另一个表的连接,其中语句,分组和顺序通过。关于MySQL数据库性能问题

我检查了状态结果,发现分组需要所有时间,我检查了解释结果,它使用了正确的索引。

所以我应该做些什么来提高我的查询性能。

感谢您的配合。

- 编辑,直接添加查询问题,而不是评论。

SELECT 
     CONCAT(column1, ' - ', column1 + INTERVAL 1 MONTH) AS DateRange, 
     cast(SUM(column2) as SIGNED) AS Alias1 
    FROM 
     Table1 
     INNER JOIN Table2 DD 
      ON Table1.Date = Table2.Date 
    WHERE 
      Table1.ID = 1 
     AND (Date BETWEEN 20110101 AND 20110201) 
    GROUP BY 
     MONTH(column1) 
    ORDER BY 
     Alias1 ASC 
    LIMIT 0, 10; 

这一个:

SELECT 
     cast(column1 as char(30)) AS DateRange, 
     cast(SUM(column2) as SIGNED) 
    FROM 
     Table1 
     INNER JOIN Table2 DD 
      ON Table1.Date = Table2.Date 
    WHERE 
      Table1.ID = 1 
     AND (Date BETWEEN 20110101 AND 20110102) 
    GROUP BY 
     column1 
    ORDER BY 
     Alias1 ASC 
    LIMIT 0, 10; 
+0

如果您希望我们提供帮助,请向我们显示查询和解释结果。 –

+0

我查询类似下面的查询:SELECT CONCAT(列1, ' - ',列1 +间隔1个月)AS DATERANGE, \t \t \t \t \t \t \t \t \t \t投(SUM(列2)作为签名)\t \t \t \t \t \t \t \t \t FROM表1 \t INNER JOIN表2 DD ON Table1.Date = Table2.Date WHERE Table1.ID = 1 AND(日期之间的20110101和20110201) GROUP BY MONTH(column1) \t \t ORDER BY column2 ASC \t \t LIMIT 0,10; – user977042

+0

和这一个:SELECT铸造(列1为char(30))AS DATERANGE, \t \t \t \t \t \t \t \t \t \t铸造(SUM(列2)的签名)\t \t \t \t \t \t \t \t FROM表1 INNER JOIN Table2 DD ON Table1.Date = Table2.Date WHERE Table1。ID = 1 AND(日期之间的20110101和20110102) GROUP BY列1 \t \t ORDER BY列2 ASC \t \t LIMIT 0,10; – user977042

对于此查询:

SELECT 
    CONCAT(column1, ' - ', column1 + INTERVAL 1 MONTH) AS DateRange <<--error? never mind 
    , cast(SUM(column2) as SIGNED) 
FROM Table1 
INNER JOIN Table2 DD ON Table1.Date = Table2.Date 
WHERE Table1.ID = 1 
    AND (Date BETWEEN 20110101 AND 20110201) 
GROUP BY MONTH(column1) <<-- problem 1. 
ORDER BY column2 ASC  <<-- problem 2. 
LIMIT 0, 10; 
  1. 如果group by功能MySQL不能使用索引。您可以通过在包含年份+月份的表格1中添加一个额外的列YearMonth,从而加快索引,然后在group by yearmonth上添加索引。
  2. 按顺序没有意义。您正在添加column2,按该列排序不起任何作用。如果你使用order by yearmonth asc,查询将运行得更快,更有意义。
+0

是的,你是对的,我命令通过别名为铸(SUM(column2)为SIGNED)而不是第2列,对于这个错误抱歉。 – user977042

+0

任何其他想法,因为我需要解决这个问题。 – user977042