私は2つのmysqlサーバーを持っています
サーバー A には mysql 5.0.51 - 8GB RAM シングル クアッド コア サーバー B には mysql 5.1.66 - 64GB RAM - 2x クアッド コア
次のクエリの実行
select FULLNAME ,(select COUNT(*) FROM ORDERS S, ACCOUNTS T WHERE S.CREATED BETWEEN '2013-04-21 00:00' AND '2013-04-27 23:59' AND S.ACCOUNT=T.ACCOUNT AND T.USERNAME=U.USERNAME AND T.CUSTOMERSTATUS = 'Donation'
and T.TIMEST=
(SELECT TC.TIMEST FROM DETAILS A, ACCOUNTS TC WHERE S.ACCOUNT=A.ACCOUNT AND A.ACCOUNT = TC.ACCOUNT AND T.USERNAME=U.USERNAME AND T.CUSTOMERSTATUS = 'Donation' AND A.ANAL16 <> 'Cheque' order by TIMEST DESC LIMIT 1))
ユーザーから U
サーバーAでは27秒で完了
サーバーBでは終了しません.400秒間データを送信した後、終了しました.
サーバーAの構成変数は次のとおりです
join_buffer_size 131072
key_buffer_size 16777216
myisam_sort_buffer_size 8388608
net_buffer_length 16384
preload_buffer_size 32768
read_buffer_size 131072
read_rnd_buffer_size 262144
sort_buffer_size 2097144
サーバーBからも同じ
join_buffer_size 131072
key_buffer_size 16777216
myisam_sort_buffer_size 8388608
net_buffer_length 16384
preload_buffer_size 32768
read_buffer_size 131072
read_rnd_buffer_size 262144
sort_buffer_size 20
OFF97144_result_sql_buffer
より高速ではるかに強力なサーバーで完了しない理由がわかりません。
オンラインでいくつかの投稿を見つけましたが、それらはすべて「インデックス作成」の問題であると述べていましたが、2 台のマシン間でどのように違いがあるのか わかりません。今朝、すべてのインデックスを使用してダンプを取得し、すべて正常に再インポートしました.
どんな助けでも大歓迎です!
説明コードで更新
サーバーA
1 PRIMARY U ALL NULL NULL NULL NULL 57 Using where; Using temporary; Using filesort
3 DEPENDENT SUBQUERY S ALL PRIMARY,ACCSTO0472 NULL NULL NULL 3948 Using where; Using temporary
3 DEPENDENT SUBQUERY T ref PRIMARY,TELCOM0473 TELCOM0473 9 func 1 Using where
4 DEPENDENT SUBQUERY TC ref PRIMARY,TELCOM0472 PRIMARY 98 tms42_gg.S.ACCOUNT 2273 Using where; Using temporary; Using filesort
4 DEPENDENT SUBQUERY A ref PRIMARY,RCMANL0472,RCMANL0473 RCMANL0473 98 tms42_gg.S.ACCOUNT 1 Using where; Using index
2 DEPENDENT SUBQUERY R ALL PRIMARY NULL NULL NULL 636 Using where; Using temporary
2 DEPENDENT SUBQUERY T ref PRIMARY,ACCSTO0122 ACCSTO0122 250 tms42_gg.R.ACCOUNT,tms42_gg.U.USERNAME 1 Using where
サーバー B
| 1 | PRIMARY | U | ALL | NULL | NULL | NULL | NULL | 57 | Using where; Using temporary; Using filesort |
| 3 | DEPENDENT SUBQUERY | S | ALL | PRIMARY,ACCSTO0472 | NULL | NULL | NULL | 3948 | Using where; Using temporary |
| 3 | DEPENDENT SUBQUERY | T | ref | PRIMARY,TELCOM0473,TELCOM047J,TELCOM047JR | TELCOM0473 | 9 | func | 1 | Using where |
| 4 | DEPENDENT SUBQUERY | TC | index | PRIMARY,TELCOM0472,TELCOM047J,TELCOM047JR | TELCOM0473 | 9 | NULL | 1 | Using where; Using temporary |
| 4 | DEPENDENT SUBQUERY | A | ref | PRIMARY,RCMANL0472,RCMANL0473 | RCMANL0473 | 98 | tms42_gg.S.ACCOUNT | 1 | Using where; Using index |
| 2 | DEPENDENT SUBQUERY | R | ALL | PRIMARY | NULL | NULL | NULL | 636 | Using where; Using temporary |
| 2 | DEPENDENT SUBQUERY | T | ref | PRIMARY,ACCSTO0122 | ACCSTO0122 | 250 | tms42_gg.R.ACCOUNT,tms42_gg.U.USERNAME | 1 | Using where
両方の場所で Explain を実行する前に SESSION SQL_BUFFER_RESULT= ON を設定しましたが、結果は同じです。