MySQL_Section/query
-
MySQL 5.6 join IssueMySQL_Section/query 2015. 1. 5. 12:43
OverviewMySQL 오픈 소스 진영은 더이상 단순 데이터 처리에만 강한 DBMS이기를 거부합니다. 이제는 대용량 처리에 적합하도록 탈바꿈 중입니다.지금까지 MySQL에서는 단일 쓰레드로 Nested Loop 방식으로 쿼리를 처리하였기 때문에, 조인 건 수가 대형화될 수록 성능이 급속도로 악화되었습니다.MariaDB는 5.3버전부터 DB 엔진과 스토리지 엔진 간의 데이터 전송이 개선되었고, 조인 시 추가적인 블록 기반의 조인 알고리즘을 제공합니다. 물론 MySQL도 5.6버전부터는 관련 기능을 어느정도 지원합니다.변화하는 MariaDB에 대해 몇 가지 소개하도록 하겠습니다.Disk access optimization1) Index Condition PushdownMySQL/MariaDB는 구조적으로 ..
-
MySQL : UPDATE 문의 다양한 활용MySQL_Section/query 2014. 11. 18. 16:48
MySQL MySQL UPDATE의 활용 업데이트(UPDATE)문은 테이블에 존재하는 값을 수정할때 사용한다. 본인의 경우, CSV 파일을 통하여 테이블에 데이터를 넣었는데 분명 값이 NULL 값이 들어가야 할 곳에 " " 이렇게 스페이스바로 들어가있는 경우를 발견하게 되었다. 이것은...토큰을 잘라서 처리할때 생긴 문제인것같은데... 자세한건 담에 알아보기로 하고 이 부분을 처리하기 위해 업데이트 문을 사용했다. 업데이트 전 쿼리문 UPDATE 테이블명 SET 필드명 = "바꿀 값" WHERE 필드명= "조건 값" 출력 결과 그 외의 활용들 UPDATE 테이블명 SET 필드명 = "바꿀 값" WHERE 필드명 > "조건 값" 조건 값보다 큰 필드의 레코드 값을 수정 UPDATE 테이블명 SET 필드명 ..
-
성능 향상을 위한 SQL 작성법MySQL_Section/query 2014. 11. 13. 18:09
성능 향상을 위한 SQL 작성법 NHN BusinessPlatform DBMS개발랩 강동완 DBMS는 저장되어 있는 데이터를 효율적으로 검색할 수 있게 인덱스를 사용합니다. 웹 애플리케이션의 백엔드 성능을 높이려고 종종 실행하는 SQL 튜닝이란, SQL이 DBMS의 인덱스를 활용하도록 SQL을 수정하는 것이라고 할 수 있습니다. 그러니 인덱스를 잘 이해하고 있다면 더 좋은 SQL을 작성할 수 있을 것이고, 훨씬 더 성능 좋은 애플리케이션을 만들 수 있을 것입니다. 이 글에서는 CUBRID 2008 R4.0에 적용된 다양한 인덱스 기법을 중심으로 인덱스 구조와 인덱스 활용 기법을 설명하겠습니다. MySQL이나 MS-SQL, 오라클 등 다른 DBMS도 이 글에서 설명하는 기법과 같거나 유사한 인덱스 기법을 ..
-
MySQL 성능 죽이는 잘못된 쿼리 습관MySQL_Section/query 2014. 11. 13. 18:03
Overview 안정적인 서비스 유지를 위해서는 쿼리 작성이 상당히 중요합니다. 잘못된 쿼리 하나가 전체적인 퍼포먼스를 크게 저해하기도 하고 최악의 경우 장애 상황까지 치닫기 때문이죠단일 코어에서 Nested Loop Join으로 데이터를 처리하는 MySQL 특성 상 쿼리 구문에 큰 영향을 받습니다. (반드시 알아야할 MySQL 특징 세 가지 참고)그래서 오늘은 쿼리 작성 시 기피해야 하는 사항 세 가지정도 골라봅니다. Case 1 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 SELECT @RNUM:=@RNUM+1 AS RNUM, ROW.* FROM (SELECT @RNUM:=0) R, ( SELECT M.MASTER_NO, M.TITLE, MI.PATH, M.REGD..
-
MySQL JOIN 문 left outer joinMySQL_Section/query 2014. 11. 13. 17:01
MySQL JOIN 문 LEFT OUTER JOIN 문은 ODBC와 호환하기 위해 쓰인다. 테이블 참조는 tbl_name AS alias_name이나 tbl_name alias_name처럼 사용해서 별명을 붙일 수 있다.mysql> select t1.name, t2.salary from employee AS t1, info AS t2 -> where t1.name=t2.name; ON 조건은 WHERE 절에서 사용되는 형식과 같은 조건이다. LEFT JOIN에서 ON이나 USING 부분으로 오른쪽 테이블과 일치하는 레코드가 없으면, 오른쪽 테이블의 모든 컬럼이 담긴 row에 NULL을 넣는다. 그러므로 다른 테이블에서 카운터파트가 없는 레코드를 찾는데 쓰인다.mysql> SELECT table1.* FR..
-
SQL의 성능은 처리 범위에 좌우된다MySQL_Section/query 2014. 11. 13. 16:33
데이터베이스가 대용량으로 변화면서 우리는 항상 성능을 고민하게 된다. 이는 많은 데이터 중 우리가 원하는 데이터를 추출하는 것이 말처럼 쉽지만은 않기 때문이다.이와 같은 현상은 데이터가 증가하면 증가할수록 더욱 심해질 것이다. 그래서 대용량의 데이터에서 우리가 원하는 적은 데이터를 추출하기위해 인덱스를 이용하게 된다.보통 인덱스는 결합 칼럼 인덱스나 단일 칼럼 인덱스로 구성할 수 있다. 그렇다면 과연 우리는 어떤 형태의 인덱스를 선택해야 할까?결론부터 말하자면 대부분의 SQL에서는 결합 칼럼 인덱스를 선택하는 편이 좋다. 이제부터 그 이유에 대해 알아보자.SQL의 성능은 처리 범위에 좌우된다 SQL의 성능은 무엇에 의해 좌우되는가? 여러 가지 요소에의해 SQL의 성능은 좌우될 것이다. SQL의 성능은 다..
-
Query Tuning 예제MySQL_Section/query 2014. 11. 13. 16:32
안녕하세요 mysql에서 해당 sql 실행 결과가 너무 늦게 나와서 문의를 드립니다. sql문과 explain을 보시고 결과가 늦게 나오는 이유에 대해 조언 부탁드립니다. 감사합니다. sql문 : select c.yyyy , c.quota seq , substring(FN_GET_COMPANY_AVG_2(c.YYYY,c.quota,c.company),1,2) total_users_avgfrom quota_date c use index (idx_yyyy, idx_company, idx_quota) inner join UHC_MEASURE_PHYSICAL a on a.yyyy = c.yyyy inner join UHC_USER_INFO b on a.USER_ID=b.USER_IDwhere c.company ..