2

私は、誰かがMySQLクエリでmsyelfよりもはるかに優れていることを望んでいます(そしてかなり確信しています)。

次の情報を含むテーブルをチェックするクエリがあります:-検索用語-この検索用語を使用したさまざまなサイトからのタイトルと価格の結果

合理化のために、スペースを削除して小文字に変換済みのデータを挿入し、MySQLサーバーの負荷を軽減するために全体を11文字にトリミングしました。

クエリは、同じタイトルの可能性が高い最大コストと最小コストを見つけ、存在する場合は価格差を判断するように設計されています。

ここでいくつかの同様の質問を読んだ後、クエリにEXPLAIN EXTENDEDを追加して、それが役立つかどうかを確認し、クエリと一緒に結果を含めました。

クエリはそのままです:

SELECT
  a.pricesrch11,
  b.pricesrch11,
  a.pricegroup11,
  b.pricegroup11,
  a.priceamt - b.priceamt AS pricediff
FROM      ebssavings a
LEFT JOIN ebssavings b ON ( a.pricesrch11 = b.pricesrch11 ) 
                      AND (a.pricegroup11 = a.pricesrch11)
                      AND (b.pricegroup11 = a.pricesrch11)
WHERE a.priceamt - b.priceamt >0
GROUP BY a.pricesrch11

EXPLAINの結果:

    select_type | table | type | possible_keys            | key  | key_len | ref  | rows | Extra
1 | SIMPLE      | a     | ALL  | pricesrch11,pricegroup11 | NULL | NULL    | NULL | 8816 | Using where; Using temporary; Using filesort
1 | SIMPLE      | b     | ALL  | pricesrch11,pricegroup11 | NULL | NULL    | NULL | 6612 | Using where

補遺:

このクエリを実行したところ、次の結果が得られました。

Showing rows 0 - 4 ( 5 total, Query took 66.8119 sec)


CREATE TABLE IF NOT EXISTS ebssavings 
( priceid int(44) NOT NULL auto_increment, 
  priceamt decimal(10,2) NOT NULL, 
  pricesrch11 varchar(11) character set utf8 collate utf8_unicode_ci NOT NULL, 
  pricegroup11 varchar(11) character set utf8 collate utf8_unicode_ci NOT NULL, 
  pricedate timestamp NOT NULL default CURRENT_TIMESTAMP, 
  PRIMARY KEY (priceid), 
  KEY priceamt (priceamt), 
  KEY pricesrch11 (pricesrch11), 
  KEY pricegroup11 (pricegroup11) ) 
ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=8817 

新しいインデックスの詳細(pricegroup11を削除し、pricesrch11とpricegroup11からsrchandtitleという複合インデックスを作成しました):

Edit     Drop   PRIMARY BTREE   Yes No  priceid 169 A       
Edit     Drop   priceamt    BTREE   No  No  priceamt    56  A       
Edit     Drop   pricesrch11 BTREE   No  No  pricesrch11 12  A       
Edit     Drop   srchandtitle    BTREE   No  No  pricesrch11 12  A       
                                                pricegroup11 169    A   
4

3 に答える 3

2

2つのインデックスを作成します。

  1. PriceSrch11
  2. pricerch11、pricegroup11のクラスター化されたインデックス
于 2012-07-03T19:38:09.903 に答える
1

pricegroup11のキーを削除し、pricesrch11、pricegroup11に複合クラスター化キーを追加します。

また、テーブルをInnoDBに移動します。

于 2012-07-03T19:56:07.633 に答える
0

テーブルとインデックスに加えられた変更により、状況はスピードアップしたようです。

テーブルを空にして、また始めています。

よろしくお願いします。

-A

于 2012-07-03T21:43:55.023 に答える