> 데이터 베이스 > MySQL 튜토리얼 > mysqltimestamp和long存储时间效率比较_MySQL

mysqltimestamp和long存储时间效率比较_MySQL

WBOY
풀어 주다: 2016-06-02 08:49:48
원래의
1566명이 탐색했습니다.

<code class="hljs sql">show create table 20130107date;

CREATE TABLE `20130107date` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `c_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `c_date_long` int(20) NOT NULL,
  `idx_date` timestamp NOT NULL DEFAULT &#39;0000-00-00 00:00:00&#39;,
  `idx_date_long` int(11) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `20130107date_idx_date` (`idx_date`),
  KEY `20130107date_idx_long` (`idx_date_long`)
) ENGINE=InnoDB
</code>
로그인 후 복사

里面有90w数据,都是随机的时间.<br /> 先看没有索引的全表扫描

1 :

<code class="hljs sql"><code class="hljs sql">select COUNT(*) from 20130107date
where c_date BETWEEN DATE(&#39;20110101&#39;) and DATE(&#39;20110102&#39;)</code></code>
로그인 후 복사

<code class="hljs sql">这个需要1.54s

<code class="hljs sql">2:

<code class="hljs sql"><code class="hljs sql"><code class="hljs sql">select COUNT(*) from 20130107date
where c_date_long BETWEEN UNIX_TIMESTAMP(&#39;20110101&#39;) and UNIX_TIMESTAMP(&#39;20110102&#39;)</code></code></code>
로그인 후 복사

<code class="hljs sql"><code class="hljs sql">这个是2.3s

<code class="hljs sql"><code class="hljs sql">但是可以这样搞<br /> 3 :

<code class="hljs sql"><code class="hljs sql"><code class="hljs sql"><code class="hljs sql">select UNIX_TIMESTAMP(&#39;20110101&#39;),UNIX_TIMESTAMP(&#39;20110102&#39;);</code></code></code></code>
로그인 후 복사

<code class="hljs sql"><code class="hljs sql"><code class="hljs sql">得到结果1293811200和1293897600

<code class="hljs sql"><code class="hljs sql"><code class="hljs sql">然后

<code class="hljs sql"><code class="hljs sql"><code class="hljs sql"><code class="hljs sql"><code class="hljs sql">select COUNT(*) from 20130107date
where c_date_long BETWEEN 1293811200 and 1293897600;</code></code></code></code></code>
로그인 후 복사

<code class="hljs sql"><code class="hljs sql"><code class="hljs sql"><code class="hljs sql">发现变成了0.61s<br /> 1和2的差距还可以说是比较int和比较timestamp的差距,那么2和3的差距呢?难道多出来的时间是每一条记录都要evaluate UNIX_TIMESTAMP(&lsquo;20110102&rsquo;)?

<code class="hljs sql"><code class="hljs sql"><code class="hljs sql"><code class="hljs sql">然后用索引

<code class="hljs sql"><code class="hljs sql"><code class="hljs sql"><code class="hljs sql"><code class="hljs sql"><code class="hljs sql">select COUNT(*) from 20130107date
where idx_date_long BETWEEN UNIX_TIMESTAMP(&#39;20110101&#39;) and UNIX_TIMESTAMP(&#39;20110102&#39;);

select COUNT(*) from 20130107date
where idx_date BETWEEN &#39;20110101&#39; and &#39;20110102&#39;</code></code></code></code></code></code>
로그인 후 복사

<code class="hljs sql"><code class="hljs sql"><code class="hljs sql"><code class="hljs sql"><code class="hljs sql">毫无悬念,两个基本都是瞬时的.

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
최신 이슈
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿