mysql 16

[삽잡이::DB] SQL_NO_CACHE

Query를 작성하고 수행 시간을 체크해보면처음에는 드럽게(?) 느리던 녀석이 어느정도 적응이 되었는지이상하게 속도가 향상되는 경우를 볼 수 있습니다. 흠... 이상하다... 난 쿼리를 발로짜는데... 예 그렇습니다... 뻔하디 뻔하지만, 바로 '캐시' 때문이지요. 그런거였군~~~ MySQL에서는 Query에 의해 만들어진 결과를보다 효율적으로 사용할 수 있도록 캐시에 저장을 하게 됩니다. 그런데, Query 수행 테스트를 위해서는 캐시가 맥여지면(?) 안되겠지요.그래서 'SQL_NO_CACHE' 를 사용합니다. Query 성능을 비교하거나 성능을 분석하기 위해 유용하게 사용할 수 있겠지요. 발로 짠 내 쿼리를 테스트해보겠어~~

[삽잡이::일기] SQL을 공부하며

요즘... Query문을 작성하며 성능이 멍멍이 같이 나오는멍멍이같은 경험을 하고 있습니다. 하.. 멍멍... 그래서 SQL 관련 서적을 보며이리 저리 신기해하고 바꿔봐야겠다는 열정을 태우며 있는데,쿼리 튜닝에 대한 중요성에 대해서 조금씩 느끼게 되었습니다. 쿼리 튜닝의 경우 각각의 DBMS마다 특성이 있고,자체적으로 지원하는 쿼리들이 있기 때문에 SQL 서적만으로는없지않아 부족한 감을 느낄 수 있다는 사실을 알게되었습니다. 결론은 서적이 정석이겠지만, 구글링과 병행하며쿼리 고수가 되어보자는 것!

[삽잡이::DB] db에서도 bit 연산을 할 수 있다

MySQL에서도 비트연산이 존재합니다.OR을 나타내는 | ,AND 연산인 & ,> 위의 연산들은 프로그래밍 언어 하나 정도 사용해본 경험이 있다면 금방 알 수 있습니다. 맞아~ 이 정도는 누가 몰라~ 사실 나야~~~ 그래서 알아볼 비트를 가지고 노는~BIT_COUNT()를 알아봅시다. BIT_COUNT() 는 안에 들어오는 값을이진수로 표현하여 1로 설정된 개수를 리턴하게 됩니다. 비트연산을 통해 수행 속도도 개선하고,쿼리도 간단하게 작성할 수 있게 됩니다. 유용하게 써먹자~~

[삽잡이::DB] Query Analyzer

EXPLAIN을 사용하여 explain plan 즉, 내가 작성한 Query문이 어떤식으로 진행될 것인지 실행 계획에 대해 확인할 수 있습니다. ... SUN에 인수된 MySQL에서는 EXPLAIN과는 같으나 시각적으로 좀 더 보기 편한 기능을 제공해줍니다.바로, MySQL Monitor인 Query Analyzer 입니다. [출처_ MySQL]EXPLAIN 만으로도 쿼리 분석은 가능하지만,비쥬얼하게 쿼리 분석을 할 수 있다는 것입니다.우와아~~

[삽잡이::DB] Index를 타라~

인덱스는 '색인'을 뜻합니다. (출처_ 네이버 백과사전) DB에서는 수 없이 많은 데이터속에서 빠르게 검색하기 위해 '인덱스'를 사용하게 됩니다.인덱스란, 원하는 데이터를 쉽게 찾을 수 있게 도와주는 녀석이라는 것입니다.제 주변에서는 흔히들 '인덱스를 타다'라고들 하더군요.. 오빠 차 뽑았다~ 널 데리러 가~ 아무튼, 우리가 만들어놓은 DB 테이블을 기반으로 인덱스를 생성할 수 있습니다. 모든 DBMS는 B*Tree 인덱스를 기본적으로 제공한다고 합니다.(출처_ dbguide.net) 나무를 뿌리부터 거꾸로 세워둔 형태의 구조입니다.어지럽겠다~~ 가지역할을 수행하는 Branch Block은 나무와 같이 분기를 목적으로 사용되고,가지에 달려있는 잎사귀와 같은 Leaf Block을 가리키는 포인터를 가지고 ..

[삽잡이::sql]mysql 테이블을 가지고 놀자! ALTER TABLE

기존에 존재하는 테이블에깜빡하고 하나의 컬럼을 빼먹은 적이 있습니다. 어떻게해야할까요? 다시 만들어야될까요?그러기에는 기존에 존재하는 데이터들이 너무 아까웠습니다. 물론, 다른 방법들도 존재하지만,컬럼을 추가하고 앞으로 들어오는 데이터에는추가된 컬럼의 값도 저장하기로 결정하였습니다. 좋아좋아~ 추가를 해보자~ '변하다', '바꾸다' 등의 실제 의미를 가지고 있는 ALTER 명령어는말 그대로 DB의 구조를 변경하는데 도움을 주는 녀석입니다. 그 중에서 우리는 Table에 Column을 추가하는 것이니ALTER TABLE 명령어를 사용하면 되겠지요. 1ALTER TABLE shovelman_info ADD COLUMN nickname varchar(25) NOT NULL;cs 이처럼 간단하게ALTER TAB..

[삽잡이::sql]count() 와 IF() 사용 주의사항! 이라 쓰고 삽질이라 읽는다

1SELECT IF(name = '삽잡이', 'Yes', 'No') AS result FROM people_finder;cs 이와 같은 Query문을 통해 각 레코드에 있는 컬럼(name)의 값이삽잡이일 경우 Yes를 그리고 아닐 경우 No를 나타낼 수 있습니다. 해당 Query문의 결과는 아마 이와 같이 출력될 것입니다. 역시 삽잡이는 유일무이하군요... 그런데 말입니다...만약, 삽잡이가 있는 레코드를 제외한 나머지 레코드들의 수를 계산해야할 필요성이 생겼습니다. 1SELECT IF(name = '삽잡이', COUNT(*), COUNT(*)-1) AS result FROM people_finder;cs 이와 같이 Query문을 작성했지요... 그런데... 삽잡이는 분명 있는데 말입니다.계속 거짓으로 ..

[삽잡이::sql] 쿼리문에서도 조건을 걸 수 있다! IF

if란...예 그렇습니다. 만약에... 만약에 말야~ 우리~ 센치해지는 순간이군요....아무튼... 그런게 아니라... Query문에서도 조건을 걸 수 있습니다. 1SELECT IF(name = '삽잡이', 'True', 'False') FROM people_finder;cs 이런식으로 말입니다! 간단하지유~? Query문도 조건을 걸면서 날릴 수 있다니~~ 그래도 날리기전에 EXPLAIN 때려보고Index 타는지 꼭 확인해보세요~ 굳~

[삽잡이::sql] 중복을 제거하라! DISTINCT

삽잡이는 중복된 데이터를 지우고 컬럼에 원하는 값들이 존재한지 알아볼 필요성이 생겼었습니다. 아래와 같은 Table에 blood_type이라는 컬럼이 있다고 가정해보겠습니다. 삽잡이는 A, B, AB, O 혈액형 모두가 해당 Table에 있는지 확인하고 싶어합니다. 오오~~ 알려줘~ 알려줘~ 이럴땐 어떻게 해야할까요??? 바로! DISTINCT 라는 키워드를 사용할 수 있습니다. 뚜렷한이라는 뜻을 가지고 있습니다. 네~ 그렇습니다. DISTINCT 키워드를 통해SELECT 문의 결과에서중복을 제거한 데이터를 뽑아낼 수 있습니다. 1SELECT DISTINCT blood_type FROM personal_records;cs 비록 간단한 예시지만,이와 같이 DISTINCT 키워드를 사용하여 중복되지 않은 결..