這就是我正在尋找優化查詢:優化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