MySQL_Section
-
Index 추가 삭제MySQL_Section/운영 2014. 11. 18. 14:28
1. 기존 테이블에 필드 추가 1 ALTER TABLE `table_name` ADD `uniqid` VARCHAR(20) NOT NULL DEFAULT '' AFTER `no`; 위 쿼리는 table_name 테이블에 no 필드 다음에 uniqid 필드를 VARCHAR(20) 타입으로 추가한다. 2. 필드타입 변경 1 ALTER TABLE `table_name` MODIFY COLUMN no INT(11) NOT NULL; 위 쿼리는 table_name의 no 필드 타입을 INT(11)로 변경한다. 3. INDEX KEY 추가 1 ALTER TABLE `table_name` ADD INDEX Index1 (uniqid, no); 위 쿼리는 table_name 테이블에 uniqid 와 no 필드를 Ind..
-
MySQL 단일 코어에서 데이터 처리 방식MySQL_Section/운영 2014. 11. 14. 18:00
MySQL 세가지 특성? MySQL 3.X 버전으로 광고 시스템을 만든 적이 있습니다. 꽤나 오래된 얘기.. 지금 생각하면 당시 광고 시스템에서 DB에 날리는 쿼리는 간단하기는 했지만, 상당한 트래픽을 무난히 견디는 것을 보고 감탄을 금치 않았습니다. 와~! 이거 물건인데? 제 첫 사용 소감이었습니다.하지만 “과연 MySQL에 대한 중요한 특성을 잘 알고 있었을까?” 라는 생각이 들었습니다.그때부터였다. MySQL이라는 녀석과 진지한 악수를 한번 해보고 싶다는 생각을 한 것이.. 그래서 여기저기 해외 사례도 기웃거리고, 서적도 진지하게 읽기 시작했죠. 읽으면서 틈틈이 벤치마킹도 수행해보고 나름의 지식 베이스를 늘려갔습니다. 단일 코어에서 Nested Loop Join 처리 다양한 스토리지 엔진 데이터 복..
-
MySQL - 실행 계획MySQL_Section/운영 2014. 11. 13. 18:33
쿼리 실행 절차 - 요청된 SQL 문장을 잘게 쪼개서 MySQL 서버가 이해할 수 있는 수준으로 분리 - SQL 파싱정보(파스트리) 확인하면서 어떤 테이블부터 읽고 어떤 인덱스 쓸지 선택 - 결정된 테이브르이 읽기 순서나 선택괸 인덱스를 이용해 스토리지 엔진으로부터 데이터 가져옴 옵티마이저 종류 - RBO : 규칙 기반 최적화 - 옵티마이저내 우선순위로 계획 수립, 항상 동일 절차 나타남. - CBO : 비용 기반 최적화 - 통계정보를 이용함. 통계정보 갱신 - ANALYZE TABLE tb_name; - ALTER TABLE tb_name ANALYZE PARTITION p3; - MyISAM : Analyze 시 테이블은 읽기만 가능 - InnoDB : Analyze 시 테이블 읽기 쓰기 모두 불가능..
-
성능 향상을 위한 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 Partition 기능과 활용MySQL_Section/운영 2014. 11. 13. 17:59
MySQL Partition 기능과 활용 2013/02/12 15:51 Partition 은 분리, 분할 한다는 의미이다.정보는 많아지고 처리해야할 데이터도 점점 많아지고 있으며, 이러한 데이터의 빠른 처리를 위한 방법 중 하나로 MySQL에서는 Partition 을 지원하고 있다.MySQL 에서 Partition은 저장할 데이터를 분할하여 관리함으로써 보다 빠른 데이터처리를 할 수 있도록 도와 준다. MySQL 에서 Partition은 V5.1부터 가능하다. Partitioning하지 않고 하나의 큰 테이블로 사용할 경우 그 만큼 인덱스도 커지고, 물리적인 공간도 많이 필요해진다.Partition을 하게 되면 데이터와 인덱스를 조각화하여 물리적 공간을 효율적으로 사용할 수 있게 만들어 준다.-. 100..
-
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의 성능은 다..