的說我有一個表,如下圖所示:高效的MySQL查詢巨大的數據集
CREATE TABLE `hadoop_apps` (
`clusterId` smallint(5) unsigned NOT NULL,
`appId` varchar(35) COLLATE utf8_unicode_ci NOT NULL,
`user` varchar(64) COLLATE utf8_unicode_ci NOT NULL,
`queue` varchar(35) COLLATE utf8_unicode_ci NOT NULL,
`appName` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
`submitTime` datetime NOT NULL COMMENT 'App submission time',
`finishTime` datetime DEFAULT NULL COMMENT 'App completion time',
`elapsedTime` int(11) DEFAULT NULL COMMENT 'App duration in milliseconds',
PRIMARY KEY (`clusterId`,`appId`,`submitTime`),
KEY `hadoop_apps_ibk_finish` (`finishTime`),
KEY `hadoop_apps_ibk_queueCluster` (`queue`,`clusterId`),
KEY `hadoop_apps_ibk_userCluster` (`user`(8),`clusterId`),
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
mysql> SELECT COUNT(*) FROM hadoop_apps;
這將返回我的計數158593816
所以我想了解什麼是效率低下有關以下查詢以及我如何改進它。
mysql> SELECT * FROM hadoop_apps WHERE DATE(finishTime)='10-11-2013';
此外,這兩個查詢有什麼區別?
mysql> SELECT * FROM hadoop_apps WHERE user='foobar';
mysql> SELECT * FROM hadoop_apps HAVING user='foobar';
另外還有一件事,WHERE和HAVING對我提到的查詢有影響嗎?對於沒有任何GROUP BY子句的人。 – paulophoenix
@paulophoenix,你應該使用WHERE進行查詢。除非你正在過濾組,否則不要使用HAVING。 –