삽질의 현장/- DataBase 26

[삽잡이::db] PHP에 Mongo DB 연동하라~!

PHP와 Mongo DB를 연동해야할 상황에 쳐했었습니다. 여기서 Mongo DB는 NoSQL에 속하는 DB중 하나를 뜻합니다~ Mongo DB...간략하게 설명하자면 관계형 DB와 다른 형식의 DB이다.JSON Type의 데이터 저장구조를 가지고 있는데,기회가 되면 따로 정리할 시간을 가졌으면 하군요~ 아무튼... PHP에서 Mongo DB를 사용하기 위해서인터넷을 뒤지고 있었는데요~좋은 자료가 있더군요!(참고_ How to Configure Mongo DB With PHP for XAMPP On Windows) 저는 윈도우상에서 xampp 를 사용하고 있었기에,윈도우 환경에서 Mongo DB 연동이 필요했습니다. 간단하게, 현재 PC(Server)에 설치되어있는 PHP Version을 확인하시고~ 요..

[삽잡이::DB] SQL_NO_CACHE

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

[삽잡이::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] 두 종류의 COUNT를 한번에 얻어보자! 특정 조건 Count

Query문을 작성하며 원하는 결과가 포함된 데이터의 개수를 구하기 위해COUNT()를 사용하곤 합니다. 그런데, 예를 들어봅시다. 이와 같은 Table이 있는데,해당 Table의 전체 개수와 Age가 10대인 데이터의 개수만을 구하기 위해서는어떻게 해야할까요?? 물론, 쿼리를 두번 날릴 수 있지만,성능을 위해 한번에 처리하는 것이 좋을 것입니다.(물론, 저정도 양이라면... 이런 고민 조차가...) 1SELECT COUNT(*), COUNT(IF(age > 20, age, NULL)) FROM info_table;cs 이와 같이 전체 데이터의 개수와,IF문을 사용하여 age가 10대인 데이터의 개수를한 Query에서 동시에 구할 수 있습니다. 예... 그렇습니다.굳~

[삽잡이::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] CASE WHEN THEN WHEN THEN ELSE END !?

case 하시면 뭐가 떠오르시나요? 삽잡이는switch ~ case 문이 떠오르군요.... 예 그렇습니다.... 저는 컴공 출신 풋내기입니다... SQL에서도 case 문이 있습니다.뭐, 사실 if문도 있는 것 보면 그다지 이제 놀랄일도 없지요. 아무튼...개인적으로는 조건이 많이 들어가는 Query문은 성능상 좋지 않을 경우들이 많다고 생각하기에 조심스럽게 사용해야한다 생각하지만... 뭐 모두 case by case니깐요~ 그러면 한번 알아봅시다~ MySQL Reference Manual에는 이렇게 나와있습니다. (출처_ MySQL Reference Manual) 뭐,,, 그런데 하나 이상의 프로그래밍 언어를 다뤄보신 경험이 있다면 그렇게 어렵지 않게 느껴지실 것입니다. CASE 문을 통해 Query에..

[삽잡이::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 타는지 꼭 확인해보세요~ 굳~