목록엔지니어스 마인드/Database (5)
하츠의 꿈
MySQL 등의 RDBMS에서 사용하는 Union 연산자는 여러 테이블에 존재는 같은 성격의 값을 한번의 쿼리로 추출할 수 있도록 돕는다. 예를 들어 Member 테이블에 회원 이메일이 있고, Newsletter 테이블에 구독자 이메일이 있는데, 모든 이메일로 메일을 보내고자 할 경우 두번의 쿼리와 병합 프로그램을 만들어야 할 것이다. 이럴 때 union 연산자를 사용하면 한번의 쿼리로 간단하게 정보를 추출할 수 있다. Union을 사용할 때 주의할 점. - 대응하는 필드의 이름이 같아야 한다. 같지 않다면 AS 를 사용하여 같게 만든다. - 대응되는 각 필드의 타입이 같아야 한다. ■ 예제 테이블 정보 * Member 테이블 seq u_name u_email etc 1 개똥이 aa@aa.co.kr ....
MySQL DB를 사용하는 경우, 특별한 규칙이 없는 256Byte가 넘는 텍스트는 도리없이 TEXT를 사용한다. 만약 해당 필드를 검색해야 한다면? 테이블의 Rows가 얼마 안되면 그냥 한 테이블에 담는다. TEXT필드를 별도의 테이블로 떼어낸다. 하지만, Row가 수십만이 넘어간다면 어떻게 하더라도 TEXT필드를 검색하기란 여간 부담이 되지 않는다. 그렇다고 검색엔진과 같은 방식을 쓰기에는 배보다 배꼽이 더 크고... 최근에 모 프로젝트를 하면서 유사한 고민이 생겼다. - 데이터 Bytes : 20 ~ 1,000 - 최대 Rows : 10,000,000 - 검색 조건 : 새로 저장할 값이 이미 존재하는 지 해당 필드에서 검색 - View 조건 : 관리자 화면에서 저당된 데이터를 확인할 수 있어야 한다..
작업 중인 모 사이트가 갑자기 다운되는 현상이 발생했다. 원인은 MySQL DB connect 숫가가 꽉 차서 연결이 안되서였다.(max_connections) 급하게 MySQL Daemon을 restart해서 다시 정상이 되기는 했지만 문제를 찾아야 했다. DB를 확인해 보니 1천만 row 가까운 테이블이 존재했고, 별다른 인덱스가 걸려있지 않았다. Slow Query Log와 해당 테이블을 사용하는 웹프로그램을 뒤져서 해당 테이블을 다른 테이블과 JOIN 하여 데이터를 추출하고 있다는 것을 알았다.... 웹프로그램을 짜다보면... '이 서비스가 얼마나 활성화되겠어? 조금 서비스하다가 말겠지..' 라는 안일한 생각과 게으름으로 쿼리를 대충 사용하는 경우가 종종 있다. 그런 경우 약간 만 동시접속자가 증..
리눅스나 유닉스에서 시간 처리할 때 흔하게 사용하는 것이 유닉스시간(Unixtime)이다. 대부분의 함수도 지원을 하고 불편함이 없이 사용하는 데 유독 DB에서는 자주 사용하지 않게 되서 꼭 필요할 때는 기억이 안난다.....-_-;; 1) Unixtime -> Date 형식(일반적인 시간)으로 변환 SELECT user_id, FROM_UNIXTIME(`regdate`,'%Y%m%d %H%i%s') FROM member : from_unixtime 이라는 MySQL 함수를 이용해서 입력받은 Unixtime 값을 일반적으로 사용하는 시간으로 변환한다. 이때 사용하는 "%" 값들은 PHP나 기타 프로그램에서 사용하는 시간 표현 문자와 동일하다. (PHP 의 date 함수 설명) 2) 현재 시간을 Unixt..
출처 : http://www.phpschool.com/bbs2/inc_view.html?id=9464&code=tnt2 [MYSQL] LIKE vs INSTR() 0. 배경 1. 영문 검색어 테스트 1-1. 앞 부분 검색 1-2. 중간 부분 검색 1-3. 끝 부분 검색 2. 한글 검색어 테스트 2-1. 앞 부분 검색 2-2. 중간 부분 검색 2-3. 끝 부분 검색 3. 결과 비교(표) 3-1. 영문 검색어 결과 3-2. 한글 검색어 결과 4. 결론 5. 후기 --------------------------------------- 0. 배경 TRUE 인 경우만 테스트한 경우임. ... cols LIKE '%한글검색어%' ... BINARY cols LIKE '%한글검색어%' 웹 게시판에서, 후자의 경우 속..