0

こんにちは、MySQL を使用しています。

SHOW PROFILES;

たとえば、次のような行を含む長いリストを返します。

 |Query_ID|Duration     |Query
>| 9    |    0.00028550 |   INSERT INTO Duration(Status,DURATION,Query_ID)|

WHEREこれを複製しようとしているので、結果をテーブルに挿入して句を追加できます。

だから私はこれを試しました

SELECT Query_ID, STATE, FORMAT(DURATION, 6) AS DURATION
FROM INFORMATION_SCHEMA.PROFILING
WHERE QUERY_ID = 9;

しかし、これは下位レベルのビューを返します(これは望ましくありません):

開始 0.000053 テーブルを開く 0.000088

これは次と同じです:

SHOW PROFILE;

どうすれば再現できSHOW PROFILESますか? だから私はこのようなことを実行することができます:

INSERT INTO Duration(Query_ID,Status,DURATION)
SELECT * FROM SHOW PROFILE
WHERE PROFILE.QUERY_ID = 9;

ありがとう

4

1 に答える 1

1

でグループ化しQUERY_IDます。ステータスを取得するには、グループごとに最大STATEのレコードが必要です。期間を取得するには、グループ内の各レコードの合計を計算します。 SEQDURATION

INSERT INTO Duration
  (Query_ID, Status, DURATION)
SELECT QUERY_ID, STATE, t.DURATION
FROM   INFORMATION_SCHEMA.PROFILING JOIN (
  SELECT   QUERY_ID, MAX(SEQ) AS SEQ, SUM(DURATION) AS DURATION
  FROM     INFORMATION_SCHEMA.PROFILING
  WHERE    QUERY_ID = 9
  GROUP BY QUERY_ID  -- superfluous in the presence of the above filter
) t USING (QUERY_ID, SEQ)
于 2013-02-19T21:21:26.673 に答える