这就是我正在寻找优化查询:优化MySQL查询
SELECT Id, Title, Text,
(SELECT count(*) from ReaderFeedback as b
where b.EmailAddress=ReaderFeedback.EmailAddress) AS totalPosts
FROM ReaderFeedback FORCE INDEX (ParentFeedbackId)
WHERE ParentFeedbackId = 123 AND Approved=1 ORDER BY Date ASC
下面是MySQL解释查询结果:
id: 1
select_type: PRIMARY
table: ReaderFeedback
Type: ref
possible_keys :ParentFeedbackId
Key: ParentFeedbackId
key_len: 7
ref: const,const
rows: 2
Extra: Using where; Using filesort
id: 2
DEPENDENT SUBQUERY
b
ALL
NULL
NULL
NULL
NULL
101369
Using where
显示创建表freader反馈若跌破:
CREATE TABLE `ReaderFeedback` (
`Id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`ParentFeedbackId` int(11) DEFAULT NULL,
`Text` text NOT NULL,
`Title` varchar(75) NOT NULL DEFAULT '',
`EmailAddress` varchar(75) NOT NULL DEFAULT '',
`Date` date NOT NULL DEFAULT '0000-00-00',
`Approved` tinyint(4) DEFAULT '1',
PRIMARY KEY (`Id`),
KEY `ParentFeedbackId` (`ParentFeedbackId`,`Approved`),
KEY `Title` (`Title`),
KEY `Id` (`Id`),
KEY `Approved` (`Approved`),
) ENGINE=MyISAM AUTO_INCREMENT=142781 DEFAULT CHARSET=utf8
请帮助一位开发人员。
谢谢!
您能向我们介绍解释计划吗? (即'EXPLAIN EXTENDED SELECT ..'。)同时向我们展示您的'show create table ReaderFeedback' – Jaylen 2014-11-24 01:22:00
以上更新!谢谢。 – Tom 2014-11-24 01:49:03
是的,你应该考虑下面的答案。添加我提到的索引,并将您的查询更改为联接会更好地执行。另外,考虑将您的引擎更改为innodb而不是MyISAM – Jaylen 2014-11-24 01:56:21