クエリはいくつかの新しいmysqlバージョンで長い間実行されます
質問
MySQL 5.0.15にデータベースを作成しました。クエリがあり、このMySQLバージョンでこのクエリを実行すると、0.9秒の実行時間が取得されます。このデータベースを同じハードウェアで別のMySQLサーバーにインポートし、同じクエリを実行すると、120を超えてMySQLがハングする場合があります。
5.0と5.1または5.5の違いは何ですか? 5.1および5.5バージョンをテストしました。
新しいバージョンでクエリに時間がかかる可能性はありますか(MySQL構造の変更のようなもの)?
申し訳ありませんが、ここにこのクエリを置くことはできませんが、クエリは次のようなものです。
SELECT fl_passenger_ticket. *,
fl_aganc.name AS agancname,
fl_pnr.remark AS remark,
fl_pnr.reservetime AS reservetime,
fl_pnr.cancelpnr,
fl_flight_date.fromcity AS fromcity,
fl_flight_date.tocity AS tocity,
fl_flight_date.flightdate AS flightdate,
fl_flightdate_capacity.adultper AS adultper,
fl_flightdate_capacity.childper AS childper,
fl_flightdate_capacity.infantper AS infantper,
fl_flightdate_capacity.cancel AS cancelsegment,
fl_flightdate_capacity.tax1adultpric,
fl_flightdate_capacity.tax1childpric,
fl_flightdate_capacity.tax1infantpric,
fl_flightdate_capacity.tax2adultpric,
fl_flightdate_capacity.tax2childpric,
fl_flightdate_capacity.tax2infantpric,
( fl_flightdate_capacity.tax3adultpric +
fl_flightdate_capacity.tax4adultpric +
fl_flightdate_capacity.tax5adultpric ) AS taxxtadultpric,
( fl_flightdate_capacity.tax3childpric +
fl_flightdate_capacity.tax4childpric +
fl_flightdate_capacity.tax5childpric ) AS taxxtchildpric,
( fl_flightdate_capacity.tax3infantpric +
fl_flightdate_capacity.tax4infantpric
+
fl_flightdate_capacity.tax5infantpric ) AS taxxtinfantpric
FROM fl_passenger_ticket
INNER JOIN fl_pnr
ON ( fl_passenger_ticket.pnrid = fl_pnr.pnrid )
INNER JOIN fl_aganc
ON ( fl_pnr.agancid = fl_aganc.agancid )
LEFT JOIN fl_flightdate_capacity
ON ( fl_pnr.pnrid = fl_flightdate_capacity.pnrid )
LEFT JOIN fl_flight_date
ON ( fl_flightdate_capacity.flightdateid = fl_flight_date.flightdateid
)
WHERE fl_passenger_ticket.ticketnumber <> ''
AND fl_passenger_ticket.pnrid <> 0
AND fl_pnr.agancid = 60
AND fl_flightdate_capacity.aganccharterid = 0
AND fl_flightdate_capacity.cancel IN ( 0, 1 )
AND fl_pnr.reservetime >= '2011/09/01 00:00:00'
AND fl_pnr.reservetime <= '2011/09/19 23:59:00'
ORDER BY fl_passenger_ticket.rowid,
fl_pnr.reservetime
4つの参加があります。
テーブルはInnodbです。
100000のレコードがあります
その結果、100列と50列があります。
結果を説明します
「innodb%」の結果のような変数を表示します
解決
すぐに、MySQLの新しいバージョンは実際にINNODBのパフォーマンスを改善します(特に5.5)。 Innodbを実行する場合は、このバージョンに更新することを強くお勧めします。
それがもっと時間がかかる理由を追い詰めるために使用できる1つの方法 MySQLプロファイル
mysql> SET PROFILING=1;
mysql> SHOW TABLES;
mysql> SELECT * FROM foo;
mysql> SET PROFILING=0;
Query OK, 0 rows affected (0.00 sec)
mysql> SHOW PROFILES;
+----------+------------+-------------------+
| Query_ID | Duration | Query |
+----------+------------+-------------------+
| 1 | 0.09270400 | SHOW TABLES |
| 2 | 0.00026400 | SELECT * FROM foo |
+----------+------------+-------------------+
2 rows in set (0.05 sec)
mysql> SHOW PROFILE FOR QUERY 2;
+----------------------+----------+
| Status | Duration |
+----------------------+----------+
| starting | 0.000053 |
| checking permissions | 0.000009 |
| Opening tables | 0.000032 |
| System lock | 0.000010 |
| init | 0.000028 |
| optimizing | 0.000003 |
| statistics | 0.000012 |
| preparing | 0.000008 |
| executing | 0.000003 |
| Sending data | 0.000068 |
| end | 0.000004 |
| query end | 0.000007 |
| closing tables | 0.000008 |
| freeing items | 0.000013 |
| logging slow query | 0.000003 |
| cleaning up | 0.000003 |
+----------------------+----------+
16 rows in set (0.04 sec)
これにより、どこにぶら下がっているのかが示されるはずです。説明出力から、完全なテーブルスキャンを行う代わりに、2番目と3番目のテーブルでいくつかのインデックス作成を取得するようにしてください。ただし、DDLまたは実際の結合列がなければ、インデックス作成戦略を調査するよりも良いものを提案することはできません。
他のヒント
適切な構成なしで、MySQL 5.5を使用してすぐに使用できます ランボルギーニを手に入れ、通常のガソリン(87オクタン)のガロンでトップノッチのパフォーマンスを期待するようなものです。
あなたは期待すべきです ランボルギーニの高オクタンガソリンでのパフォーマンスが向上します.
他のデータベース製品と同様に、実際に構成するのと同じくらいパフォーマンスが強化されています。 Spidermanが言ったように(8:36-8:40):「大きな力で、常に大きな責任がなければなりません」.
MySQL 5.5からより良いパフォーマンスを得るには、特定のことを正直に構成する必要があります。
オプション1 : INNODBに個別のテーブルスペースファイルを使用し、データとインデックスページをibdata1から分離します
オプション2: より多くのCPUを関与させるオプションを構成します
オプション3: 読み取りと書き込み専用のスレッドの数を増やす
オプション4: INNODBオプションを適切に調整します
オプション5: すべてのデータを保持するのに十分な大きさになるように、Innodbバッファープール、またはインストールされたRAMの75%が小さい方のいずれか小さい方が大きくなります.
オプション6: InnodbフラッシングにはO_Directを使用します
オプション7:LAMP、WAMP、XAMPP、MUNIN、およびこのようなソフトウェアは別として、専用のDBサーバーを使用します。