mysql5.7とmysql 5.6 groupbyの違い
1301 ワード
#テーブルの構成
#メモリテーブルのデータ
二、サブクエリによる実現
1、sql文
select from(select from test3 ORDER BY dtime DESC) as temp GROUP BY bid ORDER BY dtime DESC;
それでは問題が来ました
あるパソコンbid=1組5.7 mysqlは16時、5.67 mysqlは20時、つまり反対です
実行計画をexplainで確認すると、limitがない場合、DERIVED操作の推定値が1つ少なくなったのは内部最適化されていることがわかり、ORDER BYはこの構文ではLIMIT制限がありソートに関連する結果を無視することができ、ORDER BYを無視することはないと考えられています.予想通りにselect from(select from test 3 ORDER BY dtime DESC limit 9999999999)as temp GROUP BY bid ORDER BY dtimeをテストしてもいいですが、あまり優雅ではありません.https://dev.mysql.com/doc/refman/5.7/en/group-by-handling.html公式サイトの説明によれば、select from(select DISTINCT from test 3 ORDER BY dtime DESC)as temp GROUP BY bid ORDER BY id descも同様である.
test3
CREATE TABLE IF NOT EXISTS test3
(id
int(11)NOT NULL auto_increment, bid
int(11) NOT NULL, cid
int(11) NOT NULL, dtime
datetime NOT NULL,PRIMARY KEY ( id
)) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=6 ; #メモリテーブルのデータ
test3
INSERT INTO test3
( id
, bid
, cid
, dtime
) VALUES(1, 1, 3, ‘2014-03-18 16:00:00’),(2, 1, 10, ‘2014-03-18 17:00:00’),(3, 2, 5, ‘2014-03-18 18:00:00’),(4, 2, 6, ‘2014-03-18 19:00:00’),(5, 1, 7, ‘2014-03-18 20:00:00’); 二、サブクエリによる実現
1、sql文
select from(select from test3 ORDER BY dtime DESC) as temp GROUP BY bid ORDER BY dtime DESC;
それでは問題が来ました
あるパソコンbid=1組5.7 mysqlは16時、5.67 mysqlは20時、つまり反対です
実行計画をexplainで確認すると、limitがない場合、DERIVED操作の推定値が1つ少なくなったのは内部最適化されていることがわかり、ORDER BYはこの構文ではLIMIT制限がありソートに関連する結果を無視することができ、ORDER BYを無視することはないと考えられています.予想通りにselect from(select from test 3 ORDER BY dtime DESC limit 9999999999)as temp GROUP BY bid ORDER BY dtimeをテストしてもいいですが、あまり優雅ではありません.https://dev.mysql.com/doc/refman/5.7/en/group-by-handling.html公式サイトの説明によれば、select from(select DISTINCT from test 3 ORDER BY dtime DESC)as temp GROUP BY bid ORDER BY id descも同様である.