MySQL timestampタイプ比較のテスト

1093 ワード

TIMESTAMPタイプフィールドとCHARの比較:
BEGIN
  #Routine body goes here...
  DECLARE rdToday CHAR(10) DEFAULT CURDATE();
  DECLARE rdBegin CHAR(19) DEFAULT CONCAT(rdToday, '00:00:00');
  DECLARE rdEnd CHAR(19) DEFAULT CONCAT(rdToday, '23:59:59');
  SELECT mdc_ordertime FROM mz_drugrecipe WHERE mdc_ordertime BETWEEN rdBegin AND rdEnd;
END

TIMESTAMPタイプフィールドとTIMESTAMPの比較:
BEGIN
  #Routine body goes here...
  DECLARE rdBegin TIMESTAMP DEFAULT CURDATE();
  DECLARE rdEnd TIMESTAMP DEFAULT TIMESTAMPADD(SECOND, -1, DATE_ADD(CURDATE(),INTERVAL 1 DAY));
  --  :
  -- DECLARE rdToday CHAR(10) DEFAULT CURDATE();
  -- DECLARE rdBegin CHAR(19) DEFAULT CONCAT(rdToday, '00:00:00');
  -- DECLARE rdEnd CHAR(19) DEFAULT CONCAT(rdToday, '23:59:59');
  SELECT mdc_ordertime FROM mz_drugrecipe WHERE mdc_ordertime BETWEEN rdBegin AND rdEnd;
END

実験手順:
いずれも100000回実行する、第1種のCHAR変数はTIMESTAMPタイプフィールドと比較し、時間40 s+、第2種のTIMESTAMP(いずれの構成で構成するも)変数はTIMESTAMPタイプフィールドと比較し、時間30 s+.
結論:
比較する変数をターゲットフィールドのタイプTIMESTAMPにして比較すべきである.