我希望(并且非常肯定)有人在MySQL查询上比msyelf好得多。
我有一个查询,它检查包含以下信息的表: - 搜索词 - 使用此搜索字词的各个网站的标题和价格结果
为了简化,我已经将已经转换为小写的数据插入,并删除了空格,并将整个内容修剪为11个字符,以帮助减少MySQL服务器上的负载。
该查询旨在查找可能相同的标题的最高成本和最低成本,并确定价格差异(如果存在)。
在这里阅读了一些类似的问题之后,我还在查询中添加了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
ADDENDUM:
我刚刚运行此查询并得到以下结果:
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,并从pricerch11和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
答案 0 :(得分:2)
创建两个索引:
答案 1 :(得分:1)
删除pricegroup11上的Key并在pricesrch11,pricegroup11上添加复合群集密钥。
同时将表格移至InnoDB。
答案 2 :(得分:0)
现在看来,随着对表和索引的更改,事情已经加快了。
我已经把桌子倒空了,我又开始了。
谢谢大家的帮助。
-A