본문 바로가기
반응형

SQL186

MySQL 현재 실행중인 쿼리 확인 및 강제 중단방법 MySQL에서 DB에서 수행중인 쿼리 중 INSERT, UPDATE 쿼리에서 너무 오랜 시간을 소모할 경우 다른 곳에서 해당 테이블을 수정하지 못하기 때문에 슬로우 쿼리의 경우에는 직접 제거해야 하는 경우도 있는데 먼저 SHOW PROCESSLIST SHOW FULL PROCESSLIST 를 사용해 조회해주면 현재 DB에서 어떤 쿼리가 수행중인지 확인할 수 있는데 ID 컬럼의 값이 INFO 컬럼의 쿼리를 수행한다고 보면 된다 여기서 PROCESSLIST 앞에 FULL을 붙여주면 INFO 컬럼에서 쿼리가 최대 100글자 제한이 아니라 전체 쿼리를 볼 수 있게 된다 마지막으로 특정 ID에서 수행하는 쿼리를 강제로 중단시키려면 KILL ID명; 을 해주면 해당 ID에 해당하는 쿼리가 바로 중단된다 2021. 3. 11.
MySQL 프로시저 함수 디버깅 하는 방법 일단 MySQL에서 프로시저(Procedure) 함수(Function)를 디버그 하려는 경우에는 디버그 기능 자체가 없기 때문에 오라클처럼 편하게 디버깅이 불가능하다 하지만 방법이 아예 없는 건 아니고 먼저 위 쿼리를 보고 디버그 로그를 담을 테이블을 만들어 준다 CREATE TABLE 스키마명.log_table ( num int DEFAULT NULL, msg varchar(255) DEFAULT NULL, date datetime DEFAULT NULL ) 다음은 디버그 용도로 사용할 프로시저를 만들어 줘야하는데 역시 아래 쿼리를 그대로 옮겨주면 된다 CREATE PROCEDURE 스키마명.PROC_LOG(MSG VARCHAR(255)) BEGIN INSERT INTO 스키마명.LOG_TABLE VA.. 2021. 3. 10.
MySQL REPLACE INTO 문 사용방법 및 예제 MySQL에서 REPLACE INTO는 INSERT 와 UPDATE 용도로 사용할 수 있는데 INSERT 용도로 사용 시에는 REPLACE INTO 테이블명(컬럼명) VALUES(값); 이렇게 사용해주면 되는데 위 스크린샷과 같이 아무 값도 없을 경우에는 쿼리 수행 시 INSERT가 되지만 KEY는 동일하게 유지한 채 타 컬럼값만 바꿔주고 쿼리 수행 후 SELECT를 해 보니 이전 KEY가 들어있던 ROW가 삭제된 후 내가 REPLACE 부분에 작성한 ROW가 신규로 들어가게 된다 다음으로 UPDATE 용도로 사용할 시에는 REPLACE INTO 테이블명 SET 컬럼명 = 값; 이렇게 사용하는데 여기서 중요한 점은 WHERE을 사용할 수 없다!! REPLACE INTO를 UPDATE 용도로 사용 시 SE.. 2021. 2. 19.
MySQL GROUP BY HAVING 사용방법 MySQL에서 GROUP BY는 컬럼을 GROUP 으로 묶을 때 사용하는데 위 예제를 보면 COUNTRYCODE를 GROUP BY로 묶어주니 데이터가 COUNTRYCODE 기준으로 묶이는 것이 보인다 여기에 COUNT, SUM, AVG 등의 집계 함수를 같이 사용해주면 특정 그룹 별로 갯수, 합계, 평균 등을 쉽게 구할 수 있다 다음은 HAVING인데 GROUP BY 사용 시에는 집계 함수에 조건을 사용할 경우 WHERE 안에 넣는 것이 아닌 GROUP BY 밑에 HAVING을 넣고 HAVING에 조건을 넣어주는 식으로 사용하게 된다 마지막으로 예제에 사용한 쿼리는 아래와 같다 -- GROUP BY 예제 SELECT NAME, COUNTRYCODE, AVG(POPULATION) FROM CITY GROU.. 2021. 2. 8.
오라클 인덱스 조회 생성 삭제 수정방법 정리 오라클에서 인덱스는 테이블의 데이터 포인터를 의미하는데 책의 목차와도 같이 테이블에 인덱스를 넣어주면 조회 시 더 빠르게 조회 결과를 얻을 수 있다 테이블 안에 데이터가 몇백~몇천만 건이 넘어갈 경우에는 인덱스가 거진 필수라고 봐주면 되겠다 하지만 몇장 되지 않는 책에 목차가 별 의미가 없듯이 인덱스로 사용하는 컬럼에 NULL이 많이 들어갔거나 데이터가 적거나 혹은 삽입, 수정, 삭제가 자주 일어나는 테이블에는 인덱스를 지정할 경우 사용하지 않은 것보다 더 오랜 시간이 걸릴 수도 있으니 이에 주의해서 사용해줘야 한다 왜 인덱스를 사용해야 하는지에 대한 내용은 아래 글을 참고해 주면 되고 SQL에서 인덱스가 필요한 이유 SQL에서 인덱스는 테이블의 데이터에 대한 포인터를 말하는데 책의 목차와 비슷한 개념이.. 2021. 2. 3.
MySQL 인덱스 조회 생성 수정 삭제 및 타는지 확인방법 MySQL에서 인덱스는 테이블을 빨리 조회하기 위해 테이블 데이터에 포인터를 주는 것인데 인덱스는 책의 목차와도 같아서 특정 컬럼에 인덱스를 지정해주면 테이블 조회 시 인덱스를 이용해 빠르게 조회할 수 있게 된다 하지만 그렇다고 인덱스를 도배하면 금방 찾을거 인덱스를 사용해 찾느라 더 느려지게 되고 컬럼 값에 NULL이 많이 들어가는 경우에도 인덱스를 사용하면 오히려 역효과가 난다 대체적으로 INDEX는 테이블에 데이터 양이 엄청나게 많을 경우 주로 사용하는데 여기서 지나치게 많은 INDEX를 지정하거나 NULL이 많은 컬럼, 삽입 수정이 자주 이루어지는 테이블에는 INDEX 사용을 지양하는 것이 좋다 인덱스에 관한 자세한 내용은 아래 링크의 글을 확인해주면 되고 SQL에서 인덱스가 필요한 이유 SQL에.. 2021. 2. 3.

반응형