Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何加快MySQL查询的速度或对其进行更改以使其更快?_Mysql_Sql - Fatal编程技术网

如何加快MySQL查询的速度或对其进行更改以使其更快?

如何加快MySQL查询的速度或对其进行更改以使其更快?,mysql,sql,Mysql,Sql,这里的SQLFiddle示例: 该示例在两个表中的每个表中只有5行,但加载IMO仍然需要很长时间。希望它能让我插入更多,这将大大增加更多行和数据的时间 此查询花费的时间太长,无法完成。wp_quantum_购买和wp_quantum_销售中的行数分别约为11000行。wp_hunter_quote_零件和wp_hunter_quotes表完全为空,因为这是为了存储系统中向前移动的数据 因此,我已将另一个系统的数据“购买”和“销售”导入到单独的表中。我需要做的是能够为采购和销售表仅显示IsActi

这里的SQLFiddle示例:

该示例在两个表中的每个表中只有5行,但加载IMO仍然需要很长时间。希望它能让我插入更多,这将大大增加更多行和数据的时间

此查询花费的时间太长,无法完成。wp_quantum_购买和wp_quantum_销售中的行数分别约为11000行。wp_hunter_quote_零件和wp_hunter_quotes表完全为空,因为这是为了存储系统中向前移动的数据

因此,我已将另一个系统的数据“购买”和“销售”导入到单独的表中。我需要做的是能够为采购和销售表仅显示IsActive=1零件,但是,如果wp_hunter_quote_零件表具有这些零件ItemName,那么它应该从wp_hunter_quote_零件和wp_hunter_quotes表中提取数据。我这里有3个完整的外部连接,但我觉得可以这样做,这样加载数据就不会超过90秒。特别是,因为我一次使用40的限制

(SELECT IFNULL(qp.ItemName, qs.ItemName) AS name, IFNULL(qp.TimeAdded, qs.TimeAdded) AS created, qs.SalesDate AS effective, qp.VendorName AS supplier, qp.Source AS source, qp.VendorType AS type, qp.Price AS cost, qs.Price AS price, CAST((((CAST(qs.Price AS DECIMAL(10,2)) - CAST(qp.Price AS DECIMAL(10,2))) / CAST(qp.Price AS DECIMAL(10,2))) * 100) AS DECIMAL(10,2)) AS markup, qs.CustomerName AS customer, qs.CustomerListID AS customerListID, qp.VendorListID AS vendorListID, '' AS itemListID
                FROM wp_quantum_purchases AS qp
                LEFT JOIN wp_quantum_sales AS qs ON (qs.ItemName = qp.ItemName AND qs.IsActive = 1)
                WHERE qp.IsActive = 1 AND NOT EXISTS (
                    SELECT 1
                    FROM wp_hunter_quote_parts AS hqp
                    WHERE qp.ItemName = hqp.ItemName AND hqp.IsActive = 1
                )
            )
            UNION ALL
(SELECT IFNULL(qp.ItemName, qs.ItemName) AS name, IFNULL(qp.TimeAdded, qs.TimeAdded) AS created, qs.SalesDate AS effective, qp.VendorName AS supplier, qp.Source AS source, qp.VendorType AS type, qp.Price AS cost, qs.Price AS price, CAST((((CAST(qs.Price AS DECIMAL(10,2)) - CAST(qp.Price AS DECIMAL(10,2))) / CAST(qp.Price AS DECIMAL(10,2))) * 100) AS DECIMAL(10,2)) AS markup, qs.CustomerName AS customer, qs.CustomerListID AS customerListID, qp.VendorListID AS vendorListID, '' AS itemListID
                FROM wp_quantum_sales AS qs
                LEFT JOIN wp_quantum_purchases AS qp ON (qp.ItemName = qs.ItemName AND qp.IsActive = 1)
                WHERE qs.IsActive = 1 AND NOT EXISTS (
                    SELECT 1
                    FROM wp_hunter_quote_parts AS hqp
                    WHERE qs.ItemName = hqp.ItemName AND hqp.IsActive = 1
                )
            )
            UNION ALL 
(SELECT hqp.ItemName AS name, hq.Quote_Date AS created, hqp.SalesDate AS effective, hqp.VendorName AS supplier, hqp.Source AS source, hqp.VendorType AS type, hqp.Cost AS cost, hqp.Price AS price, CAST((((CAST(hqp.Price AS DECIMAL(10,2)) - CAST(hqp.Cost AS DECIMAL(10,2))) / CAST(hqp.Cost AS DECIMAL(10,2))) * 100) AS DECIMAL(10,2)) AS markup, IFNULL(hq.Customer_FullName, 'N/A') AS customer, hq.Customer_ListID AS customerListID, hqp.VendorListID AS vendorListID, hqp.Item_ListID AS itemListID
                FROM wp_hunter_quote_parts AS hqp
                LEFT JOIN wp_hunter_quotes AS hq ON (hq.id = hqp.QuoteID)
                WHERE hqp.IsActive = 1)

ORDER BY name ASC
LIMIT 0, 40;
有人能帮我吗?我需要合并采购和销售两个表到一个组合表,这是这样做。。。毫无疑问,速度非常慢,需要对hunter\u quote\u parts表进行外部联接,因此,如果hqp.IsActive=1存在,则需要从wp\u hunter\u quote\u parts表中提取数据,而不是从合并的其他两个表中提取数据

我如何使这个查询工作得更快,或者修改它,使其功能相同,但更快?有人帮忙吗

如果可能的话,最好的解决方案是使用类似的方法:

SELECT *
FROM wp_quantum_purchases AS qp, wp_quantum_sales AS qs
LEFT JOIN wp_hunter_quote_parts AS hqp ON ((hqp.ItemName = qp.ItemName || hqp.ItemName = qs.ItemName) AND hqp.IsActive = 1)
LEFT JOIN wp_hunter_quotes AS hq ON (hq.id = hqp.QuoteID)
WHERE qp.IsActive = 1 || qs.IsActive = 1;

但是,此查询的问题在于,它依赖于wp_quantum_purchases或wp_quantum_sales在允许它从wp_hunter_quote_零件或wp_hunter_quotes表中获取任何数据之前,在其中有一行IsActive=1。这是一个不可接受的查询,因为它需要在我的系统中捕获向前移动的数据,而向前移动的数据将在wp_hunter_quote和wp_hunter_quote_parts表中捕获。ItemName可能是量子表中甚至不存在的新项。虽然如果报价表中不存在,但如果存在,我需要显示wp_quantum_购买和wp_quantum_销售的先前数据。怎么会有人这么做??这似乎很基本,应该可以做到,但为什么这么难理解呢?更重要的是,我发现这个查询需要很长时间才能完成。不确定这里还需要什么…?

子查询会降低查询执行速度。所以尽量不要使用子查询子查询?你是说左联接?我正在用sales和purchase表中的数据构建一个标记列,所以我不确定如果不在另一个表上左联接,我是否可以这样做。我想我可以在mysql查询之外计算标记,但如果可能的话,我更愿意在查询中计算标记。联接不同于子查询。在您的情况下,以下是以SELECT开头的子查询。并且不存在从wp_hunter_quote_零件中选择1作为hqp,其中qs.ItemName=hqp.ItemName和hqp.IsActive=1您的SqlFIDLE没有任何索引-在真实数据库中是否相同?如果是这样,您可以通过添加索引获得重大改进。。。