2017-11-07 12 views
0

サブクエリでMySQLクエリを取得しました。
SQL fiddleグループによるMysqlサブクエリの最適化by

テーブルの構造は次のとおりです。

CREATE TABLE `wildberries` (
    `id` INT(11) NOT NULL AUTO_INCREMENT, 
    `brand` VARCHAR(50) NULL DEFAULT NULL, 
    `subject` VARCHAR(50) NULL DEFAULT NULL, 
    `article` VARCHAR(50) NULL DEFAULT NULL, 
    `size` VARCHAR(50) NULL DEFAULT NULL, 
    `color` VARCHAR(50) NULL DEFAULT NULL, 
    `income` INT(11) NULL DEFAULT NULL, 
    `income_sum_price` VARCHAR(50) NULL DEFAULT NULL, 
    `ordered` VARCHAR(50) NULL DEFAULT NULL, 
    `ordered_sum_price` VARCHAR(50) NULL DEFAULT NULL, 
    `ordered_max_by_day` VARCHAR(50) NULL DEFAULT NULL, 
    `return_before_payment` VARCHAR(50) NULL DEFAULT NULL, 
    `return_before_payment_sum_price` VARCHAR(50) NULL DEFAULT NULL, 
    `sales_by_payment` INT(11) NULL DEFAULT NULL, 
    `sales_by_payment_sum_price` VARCHAR(50) NULL DEFAULT NULL, 
    `return` INT(11) NULL DEFAULT NULL, 
    `return_sum_price` VARCHAR(50) NULL DEFAULT NULL, 
    `stock` VARCHAR(50) NULL DEFAULT NULL, 
    `source_file` VARCHAR(50) NULL DEFAULT NULL, 
    `from` DATE NULL DEFAULT NULL, 
    `end` DATE NULL DEFAULT NULL, 
    `clear_article` VARCHAR(50) NULL DEFAULT NULL, 
    `user_id` INT(11) NULL DEFAULT NULL, 
    `file_hash` VARCHAR(50) NULL DEFAULT 'sha1(concat(user_id, source_file))', 
    PRIMARY KEY (`id`), 
    INDEX `from` (`from`), 
    INDEX `end` (`end`), 
    INDEX `size_color_clear_article` (`size`, `color`, `clear_article`) 
) 
COLLATE='utf8_general_ci' 
ENGINE=InnoDB; 

クエリは次のとおりです。

SELECT wildberries.clear_article AS clear_article, wildberries.color AS color, wildberries.size AS size, (
SELECT w2.stock 
FROM wildberries w2 
WHERE w2.clear_article = wildberries.clear_article AND w2.color = wildberries.color AND w2.size = wildberries.size 
ORDER BY w2.from DESC 
LIMIT 1) AS stock 
FROM wildberries 
GROUP BY clear_article , color, size 
ORDER BY `from` DESC 

このクエリは私に正しい値(最新の製品の日付の株式)を提供します。

しかし、このクエリは遅すぎます。インデックスを追加しようとしましたが結果はありません。

主なアイデアは:各製品(clear_article、サイズ、色との組み合わせ)に最新の 'from'を取得し、そのための '在庫'を取得することです。

誰かが私に助言を与えることはできますか?サブクエリなしでこのクエリを書き直すことは可能ですか?

更新日:サンプルデータがテーブルにあります。

+0

もそこには、データをませんので、私は結果の多くを期待していない – scaisEdge

+1

サンプルと期待される結果とテキストaddが...リンクolnyを使用していない:-( – Strawberry

+0

サブクエリが選択される理由 – abr

答えて

0

なぜ、同じテーブルに副選択があるのですか?最初に既に存在している値を検索するのはなぜですか? あなたが持っているものの簡易版

SELECT clear_article, color, size, stock 
FROM wildberries 
ORDER BY wildberries.from DESC 
+0

申し訳ありませんが、私はクエリで大きな間違いを犯しました。私はGROUP BY条件を追加するのを忘れていましたが、すべてが変更されています – Tasty

+0

PS申し訳ありませんが間違った質問 – Tasty

+0

答えを提供し、この質問を閉じる、今後の参考のために:) – abr

関連する問題