MySQL
-
Real MySQL [7-8] 쿼리 작성 및 최적화 - WHERE, ORDER BY 인덱스 사용MySQL 2017. 1. 18. 20:21
본 게시물의 내용과 이미지는 도서 Real MySQL의 내용을 재구성하여 작성되었습니다. 저자, 출판사에 의해 저작권 문제 발생시 게시물이 비공개 될 수 있음을 알립니다. ORDER BY 절의 인덱스 사용 MySQL에서 GROUP_BY와 ORDER BY는 처리 방법이 상당히 비슷하여 인덱스 사용 여부 요건도 거의 흡사하다. 하지만 ORDER BY는 조건이 하나 더 있는데, 정렬되는 각 칼럼의 오름차순 및 내림차순 옵션이 인덱스와 같거나 정반대의 경우에만 사용할 수 있다. 위와 같은 인덱스에서 다음 예제의 ORDER BY는 인덱스를 사용할 수 없다. ( ORDER BY 절에 ASC나 DESC와 같이 정렬 순서가 생략되면 오름차순(ASC)로 해석한다. ) ... ORDER BY COL2, COL3 > 인덱스..
-
Real MySQL [7-7] 쿼리 작성 및 최적화 - WHERE 절의 인덱스 사용MySQL 2017. 1. 16. 20:27
본 게시물의 내용과 이미지는 도서 Real MySQL의 내용을 재구성하여 작성되었습니다. 저자, 출판사에 의해 저작권 문제 발생시 게시물이 비공개 될 수 있음을 알립니다. SELECT 각 절의 처리순서 포스팅에서 사용된 SELECT 문장이라는 용어는 SQL 전체를 의미한다. SELECT 키워드와 실제 가져올 칼럼을 명시한 부분만 언급할 때는 SELECT 절 이라 표현하겠다. 여기서 절이란 주로 알고 있는 키워드 (SELECT, FROM, JOIN, WHERE, GROUP BY, HAVING, ORDER BY, LIMIT)와 그 뒤에 기술된 표현식을 묶어서 말한다. SELECT s.emp_no COUNT(DISTINCT e.first_name) AS cnt FROM salaries s INNER JOIN ..
-
Real MySQL [7-6] 쿼리 작성 및 최적화 - MySQL 내장함수MySQL 2017. 1. 9. 19:58
본 게시물의 내용과 이미지는 도서 Real MySQL의 내용을 재구성하여 작성되었습니다. 저자, 출판사에 의해 저작권 문제 발생시 게시물이 비공개 될 수 있음을 알립니다. 문자열 결합(CONCAT) 여러 개의 문자열을 연결해 하나의 문자열로 반환하는 함수로, 인자의 개수는 제한이 없다. 숫자는 문자열 타입으로 자동 변환된다. CAST는 함수를 사용해 명시적으로 타입을 문자열로 변환하는 방법도 있다. mysql> SELECT CONCAT('Georgi', 'Christian') AS name; // GeorgiChristian mysql> SELECT CONCAT('Georgi', 'Christian', 2) As name; // GeorgiChristian2 mysql> SELECT CONCAT('Geo..
-
Real MySQL [7-5] 쿼리 작성 및 최적화 - MySQL 내장함수 (날짜, date 관련)MySQL 2017. 1. 3. 22:32
본 게시물의 내용과 이미지는 도서 Real MySQL의 내용을 재구성하여 작성되었습니다. 저자, 출판사에 의해 저작권 문제 발생시 게시물이 비공개 될 수 있음을 알립니다. MySQL 내장함수 DBMS 종류에 관계없이 기본적인 기능의 SQL 함수는 대부분 동일하게 제공되지만 함수 이름이나 사용법은 표준이 없어 DBMS별로 거의 호환되지 않는다. 포스팅에 작성된 내장함수는 사용자 정의 함수와 혼동하지 않도록 주의하자. NULL 값 비교 및 대체 (IFNULL, ISNULL) IFNULL()은 칼럼이나 표현식의 값이 NUL인지 비교하고 NULL 이면 다른 값으로 대체하는 용도로 사용할 수 있는 함수다. IFNULL() 함수에는 두 개의 인자를 전달하는데, 첫 번째 인자는 NULL 인지 아닌지 비교하는 칼럼이나..
-
Real MySQL [7-4] 쿼리 작성 및 최적화 - MySQL 연산자 (BETWEEN, IN)MySQL 2017. 1. 3. 20:02
본 게시물의 내용과 이미지는 도서 Real MySQL의 내용을 재구성하여 작성되었습니다. 저자, 출판사에 의해 저작권 문제 발생시 게시물이 비공개 될 수 있음을 알립니다. BETWEEN 연산자 BETWEEN 연산자는 "크거나 같다"와 "작거나 같다"는 두 개의 연산자를 하나로 합친 연산자다. BETWEEN 연산자는 다른 비교 조건과 결합해 하나의 인덱스를 사용할 때 주의해야 할 점이 있다. 동등 비교 연산자와 BETWEEN 연산자를 이용해 부서 번호와 사원 번호로 dept_emp 테이블을 조회하는 다음 쿼리를 한번 생각해 보자. SELECT * FROM dept_emp WHERE dept_no='d003' AND emp_no=10001; SELECT * FROM dept_emp WHERE dept_no ..
-
Real MySQL [7-3] 쿼리 작성 및 최적화 - MySQL 연산자MySQL 2017. 1. 2. 21:28
본 게시물의 내용과 이미지는 도서 Real MySQL의 내용을 재구성하여 작성되었습니다. 저자, 출판사에 의해 저작권 문제 발생시 게시물이 비공개 될 수 있음을 알립니다. MySQL 연산자 동등(Equal) 비교( =, ) 동등 비교는 다른 DBMS와 마찬가지로 "=" 기호를 사용해 비교를 수행하면 된다. MySQL은 동등 비교를 위해 "" 연산자도 제공한다. "" 연산자는 "=" 연산자와 같으며, 부가적으로 NULL 값에 대한 비교까지 수행한다. 위 예제와 같이 NULL은 "IS NULL" 연산자 이외에는 비교할 방법이 없다. 하지만 Null-Safe 비교연산자를 이용해 비교한 결과를 보면 양쪽 비교 대상 모두 NULL이라면 TRUE를 반환하고, 한쪽만 NULL이라면 FALSE를 반환한다. 즉 "" 연..
-
Real MySQL [7-2] 쿼리 작성 및 최적화 - MySQL 연산자, 내장 함수MySQL 2016. 12. 30. 22:54
본 게시물의 내용과 이미지는 도서 Real MySQL의 내용을 재구성하여 작성되었습니다. 저자, 출판사에 의해 저작권 문제 발생시 게시물이 비공개 될 수 있음을 알립니다. 매뉴얼의 SQL 문법 표기를 읽는 방법 SQL에서 각 키워드는 위의 그림과 같이 키워드나 표현식이 표기된 순서대로만 사용할 수 있다. 표기법에 대문자로 표현된 단어는 모두 키워드를 의미한다. 키워드는 대소문자를 특별히 구분하지 않고 사용할 수 있다. 대괄호("[ ]")는 해당 키워드나 표현식 자체가 선택 사항임을 의미한다. 즉 대괄호로 묶인 키워드나 표현식은 없어도 문법적인 오류를 일으키지 않으며, 있어도 문법적인 오류가 발생하지 않음을 의미한다. 파이프("|")는 앞과 뒤의 키워드나 표현식 중에서 단 하나만 선택해서 사용할 수 있음을..
-
Real MySQL [7-1] 쿼리 작성 및 최적화 - SQL 모드, MySQL 예약어MySQL 2016. 12. 23. 20:36
본 게시물의 내용과 이미지는 도서 Real MySQL의 내용을 재구성하여 작성되었습니다. 저자, 출판사에 의해 저작권 문제 발생시 게시물이 비공개 될 수 있음을 알립니다. 쿼리 작성 및 최적화 애플리케이션에서 데이터를 저장 또는 조회하기 위해 데이터베이스와 통신할 때 데이터베이스 서버로 전달되는 것은 SQL 뿐이다. SQL은 어떠한 데이터를 요청하기 위한 언어이지, 어떻게 데이터를 읽을지를 표현하는 언어는 아니므로 C나 자바와 같은 언어와 비교했을 때 상당히 제한적으로 느껴질 수 있다. 하지만 쿼리가 빠르게 수행되게 하려면 쿼리가 어떻게 데이터를 가져올지 예측할 수 있어야 한다. 그래서 SQL을 작성하는 방법이나 규칙은 물론, 내부적인 처리 방식(옵티마이저)에 대해 어느 정도의 지식이 필요하다. SQL ..