读取订单非常慢的mysql查询(联接和分组依据)

斯特凡

阅读订单的查询非常慢。我已经尝试了很多东西,但是无法获得更快的查询。查询和数据库表下方。当然,所有重要字段都有索引。我注意到按功能删除分组可以加快速度,但是对查询进行分组很重要。

有更好的方法来获取订单吗?提前致谢。

SELECT
orders.id AS orderId, orders.delivery_from, orders.delivery_to,
orders_products.product_id, orders_products.color_id, ,orders_products.size_id,
sum(orders_products.quantity) as quantity,
customers.id AS customerId, customers.name AS customerName,
products.name
FROM orders
    INNER JOIN orders_products ON orders_products.order_id=orders.id
    INNER JOIN customers ON customers.id=orders.customer_id
    INNER JOIN products ON orders_products.product_id=products.id
    LEFT JOIN orders_product_data ON orders_product_data.order_id=orders.id AND orders_product_data.product_id=orders_product.product_id AND orders_product_data.color_id=orders_product.color_id
WHERE orders.status='0' AND
(orders.delivery_from<='2014-05-05' AND orders.delivery_to>='2014-05-05') AND
((orders_products_data.delivery_from<='2014-05-05' || orders_products_data.delivery_to=0) AND (orders_products_data.delivery_from>='2014-05-05' || orders_products_data.delivery_to=0))
GROUP BY customer_id, product_id, color_id, size_id

顾客

CREATE TABLE IF NOT EXISTS `customers` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(90) NOT NULL DEFAULT '',
  PRIMARY KEY (`id`)
);

产品展示

CREATE TABLE IF NOT EXISTS `products` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(20) NOT NULL DEFAULT '',
  PRIMARY KEY (`id`)
);

命令

CREATE TABLE IF NOT EXISTS `orders` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `customer_id` int(11) NOT NULL,
  `delivery_from` date NOT NULL,
  `delivery_to` date NOT NULL,
  `status` int(1) NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`)
);

订单产品

CREATE TABLE IF NOT EXISTS `orders_products` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `order_id` int(11) NOT NULL DEFAULT '0',
  `product_id` int(11) NOT NULL DEFAULT '0',
  `color_id` int(11) NOT NULL DEFAULT '0',
  `size_id` int(11) NOT NULL DEFAULT '0',
  `quantity` int(11) NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`)
);

颜色数据。下面的表格针对order_id,product_id和color_id组合存储交货信息,因为不同颜色产品的交货可能会发生变化。

CREATE TABLE IF NOT EXISTS `orders_products_data` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `order_id` int(11) NOT NULL DEFAULT '0',
  `product_id` int(11) NOT NULL DEFAULT '0',
  `color_id` int(11) NOT NULL DEFAULT '0',
  `delivery_from` date NOT NULL,
  `delivery_to` date NOT NULL,
  PRIMARY KEY (`id`)
);

解释查询 在此处输入图片说明

苏雷什高塔姆

您已经提到您对所有重要字段都有索引。

仅针对您的信息-索引应基于访问路径而不是针对重要字段进行准备。

在将'_'和'...'之间的delivery_from替换为订单,orders_product_data并添加以下索引后检查:在订单上创建索引idx_orders_status_delivery_from_to((statusdelivery_from,delivery_to);

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

具有总和,联接和分组依据的Mysql子查询

来自分类Dev

优化SQL分组依据和联接查询

来自分类Dev

优化SQL分组依据和联接查询

来自分类Dev

MySQL查询联接语句非常慢

来自分类Dev

MySQL总和,以分组依据和联接计数

来自分类Dev

使用总和,计数,分组依据和多个左联接MySQL执行查询

来自分类Dev

具有多个联接,max()和分组依据的慢速MySQL查询

来自分类Dev

MySQL分组依据和查询顺序

来自分类Dev

使用联接,分组依据和聚合函数的SQL选择查询

来自分类Dev

MySQL非常慢的查询

来自分类Dev

MYSQL(NOT IN)查询非常慢

来自分类Dev

MySQL计数,分组和联接查询

来自分类Dev

MySQL计数,分组和联接查询

来自分类Dev

MySQL查询-嵌套与分组依据

来自分类Dev

大型mysql查询,分组依据

来自分类Dev

mysql子查询计数在哪里和分组依据

来自分类Dev

MYSQL查询选择具有相同列和分组依据的

来自分类Dev

Linq多个联接和分组依据

来自分类Dev

如何通过对表和分组依据的多个和查询来联接2表

来自分类Dev

MySQL排序依据和分组依据

来自分类Dev

MYSQL-分组依据和排序依据

来自分类Dev

MySQL子查询非常慢

来自分类Dev

MySQL选择查询非常慢

来自分类Dev

MySQL查询运行非常慢

来自分类Dev

添加内部联接和分组依据时的SQL查询时差给出错误的计算

来自分类Dev

SQL查询联接两个表,分组和排序依据

来自分类Dev

COUNT个条件,其中包含“分组依据”和“联接”的查询条件

来自分类Dev

SQL查询联接两个表,分组和排序依据

来自分类Dev

MYSQL查询分组和财务订单的累积总和