【发布时间】:2014-03-20 14:40:19
【问题描述】:
所以我需要表格,products_used aprox 600MB 和 products_language_description 大约 5MB,但问题是这个查询永远不会完成运行......
我已经尝试修复,优化分析,我不知道如何改进这个......
SELECT pu.products_id, count(pu.products_id) as products_count, p.products_name,
pu.time_used FROM products_used pu, products_language_description p
WHERE pu.merchant_id='69'
AND p.products_id=pu.products_id GROUP BY products_id ORDER BY products_count
DESC LIMIT 0, 20
CREATE TABLE `products_used` (
`products_used_id` INT(15) NOT NULL AUTO_INCREMENT,
`plans_key` VARCHAR(255) NOT NULL DEFAULT '0',
`products_id` BIGINT(20) NOT NULL DEFAULT '0',
`customers_id` INT(10) NOT NULL DEFAULT '0',
`merchant_id` INT(10) NOT NULL DEFAULT '0',
`time_used` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00',
PRIMARY KEY (`products_used_id`),
INDEX `plans_key` (`plans_key`)
)
COLLATE='latin1_swedish_ci'
ENGINE=MyISAM
AUTO_INCREMENT=24625441;
CREATE TABLE `products_language_description` (
`products_id` INT(5) NOT NULL DEFAULT '0',
`products_description` LONGTEXT NOT NULL,
`products_name` TEXT NOT NULL COLLATE 'utf8_general_ci',
`products_help_info` LONGBLOB NOT NULL,
`products_language` VARCHAR(255) NOT NULL DEFAULT '',
PRIMARY KEY (`products_id`, `products_language`)
)
COLLATE='latin1_swedish_ci'
ENGINE=MyISAM;
【问题讨论】:
-
那么您是否尝试过对您的查询进行解释,或者考虑在表上放置适当的索引? (例如,
products_used.product_id上的索引,或者products_used.merchant_id上的索引 -
将索引放在要使用 WHERE 子句的任何字段上通常是一个很好的经验法则,尤其是当该字段中存在重复值时。
-
我强烈建议使用显式而不是隐式连接
标签: php mysql sql performance