mysql - 如何提高Mysql的查询能力?

标签 mysql performance

我在 MySql 中进行了此查询。找到了,但是查询时间是3分钟以上。

我想知道是否可以改进此查询。

查询是这样的:

SELECT CODARTIOLO, NOMEARTICOLO, SUM(QUANTITA) AS QUANTITA,
  (SUM(TOTRIGA)/SUM(QUANTITA)) AS TOTALE,
  (SELECT (SUM(QUANTITA * PREZZOCAD))/SUM(QUANTITA)
   FROM vistacaricomagazzino cm
   WHERE cm.DATA <= '$dataStart' AND cm.codarticolo=CODARTIOLO) AS PREZZOMEDIO 
FROM vistascontrini c 
WHERE c.DATA >= '$dataStart' AND c.DATA <= '$dataEnd'
GROUP BY NOMEARTICOLO

表格是:

VISTASCONTRINI

+--------------+--------------+------+-----+------------+-------+
| Field        | Type         | Null | Key | Default    | Extra |
+--------------+--------------+------+-----+------------+-------+
| CODARTIOLO   | varchar(13)  | YES  |     | NULL       |       |
| NOMEARTICOLO | varchar(60)  | YES  |     | NULL       |       |
| QUANTITA     | int(11)      | YES  |     | NULL       |       |
| TOTRIGA      | decimal(9,2) | YES  |     | NULL       |       |
| DATA         | date         | NO   |     | 0000-00-00 |       |

VISTACARICOMAGAZZINO

+-------------+---------------+------+-----+---------+-------+
| Field       | Type          | Null | Key | Default | Extra |
+-------------+---------------+------+-----+---------+-------+
| codordine   | int(11)       | NO   |     | 0       |       |
| Quantita    | int(11)       | YES  |     | NULL    |       |
| PrezzoCad   | decimal(10,3) | YES  |     | NULL    |       |
| codArticolo | varchar(13)   | YES  |     | NULL    |       |
| Data        | date          | YES  |     | NULL    |       |
+-------------+---------------+------+-----+---------+-------+

最佳答案

如果您的表没有索引(而且看起来也没有),那么这是您需要解决的第一件事。如果你做得正确(即将索引放在需要索引的字段上),它可能会一击就解决你的问题。

您需要考虑建立索引的字段是 WHERE 和 GROUP BY 子句使用的字段。

接下来,考虑将其从嵌套 SELECT 查询转换为 JOIN 查询。这也可能会给你带来更好的性能。

最后,您还没有说明这里要整理多少数据,但如果数据量很大,那么请考虑将整理后的数据总数单独存储在数据库中,以便您可以直接查询,而不是通过每次都重新生成所有这些总和和组。这显然有它自己的考虑因素(额外的存储、更新数据时的额外代码也更新总数、事情不同步的可能性等),但如果你真的在这方面遇到性能问题,那么这是一个有效的解决方案。

关于mysql - 如何提高Mysql的查询能力?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22560085/

相关文章:

php - 我无法将我的计算机配置为使用 XAMPP

Python - 通过从B表中选择id来更新一个表中的多条记录的最快方法

performance - 轨道-perftest `require' : cannot load such file -- test_helper (LoadError)

c++ - C++中有很多种分割字符串的方法,哪种方法性能最好?

c# - 使用 linq 查询简化流程

performance - 如何将jboss中 "webcontainer worker-threads"的数字设置为7?

sql - MySQL 和 UTF-8

mysql - 关于SQL View,我有一些困惑

php - Laravel 4 分页方法

python - 性能问题 : big numpy array and system call