여기 당신을위한 교훈이다.
대부분의 초보자 프로그래머는 "최고의", "가장 효율적인"방법 및 물건을 찾고 있습니다.
코드의 양으로 효율을 판단하고있는 중! "적은 코드 - 더 효율적입니다!" - 그들은 생각한다. 물론 잘못된 것입니다. 의는 "비효율적"한 개 "효율적"솔루션을 비교 해보자
mysql> explain select * from Board where year(date) = 2011 and month(date) = 1;
+----+-------------+-------+------+---------------+------+---------+------+-------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+------+---------------+------+---------+------+-------+-------------+
| 1 | SIMPLE | Board | ALL | NULL | NULL | NULL | NULL | 18113 | Using where |
+----+-------------+-------+------+---------------+------+---------+------+-------+-------------+
mysql> explain select * from Board where date > '2010-12-31' and date < '2011-02-01';
+----+-------------+-------+-------+---------------+------+---------+------+------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+-------+---------------+------+---------+------+------+-------------+
| 1 | SIMPLE | Board | range | date | date | 9 | NULL | 325 | Using where |
+----+-------------+-------+-------+---------------+------+---------+------+------+-------------+
공지 사항 possible keys
및 rows
매개 변수를 설정합니다.
후자의 경우 데이터베이스는 필요한 정확한 행을 얻습니다. 전자에서는 테이블의 모든 행을 선택하고 날짜에 함수를 적용하고 상수와 비교합니다.
같은 당신의 무지 코멘트 후 자신의 좋은 답변을 삭제 가난한 사람의 솔루션을 간다 :
mysql> explain select * from Board where `date` > LAST_DAY(DATE_SUB('2011-01-15', INTERVAL 1 MONTH)) AND `date` < DATE_ADD(LAST_DAY('2011-01-15'), INTERVAL 1 DAY);
+----+-------------+-------+-------+---------------+------+---------+------+------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+-------+---------------+------+---------+------+------+-------------+
| 1 | SIMPLE | Board | range | date | date | 9 | NULL | 325 | Using where |
+----+-------------+-------+-------+---------------+------+---------+------+------+-------------+
안 그런가 말했다.
왜 이것이 최선의 방법이라고 생각하지 않습니까? 매우 간단한 날짜 작업에 문제가 있습니까? –
@Stofke SQL은 무엇을 위해 설계 되었습니까? 날짜 계산을 위해서? 그는 날짜를 얻는 방법을 묻는 것이지 그것을 비교하는 방법이 아닙니다. –
@Stofke 그는 쿼리하는 방법이 아니라 범위를 얻는 방법을 묻습니다. –