MySQL 인덱스: B-Tree, Fulltext, Spatial의 차이와 사용법 (MySQL Index Guide: B-Tree, Fulltext, Spatial)
·
Programing/MySQL
MySQL에서 인덱스는 성능 최적화의 핵심 도구입니다. 단순히 쿼리를 빠르게 만드는 것뿐만 아니라, 데이터 구조와 접근 방식에 따라 시스템 전체 성능에 영향을 미치기도 합니다. 본 글에서는 MySQL이 제공하는 세 가지 주요 인덱스 유형인 "B-Tree", "Fulltext", "Spatial" 인덱스를 비교하고, 각각의 사용 목적, 구조적 특징, 실무 활용 팁을 정리합니다.B-Tree 인덱스 (MySQL에서 B-Tree 인덱스가 기본인 이유)MySQL에서 가장 널리 사용되는 인덱스 유형은 "B-Tree 인덱스"입니다. MyISAM, InnoDB 등 주요 스토리지 엔진에서 기본 인덱스 구조로 채택하고 있으며, 일반적인 PRIMARY KEY, UNIQUE, INDEX 제약 조건은 모두 B-Tree 구조로 ..
MySQL에서 금액을 한글로 표기하는 방법
·
Programing/MySQL
연관글2025.04.18 - [Programing/javascript] - 💰 숫자를 한글로 금액 단위로 표현2025.04.18 - [Programing/javascript] - 💻 숫자를 한글 숫자 표기로 변환웹 서비스나 전자문서에서 금액을 숫자가 아닌 한글로 표기해야 하는 경우가 종종 있습니다. 예를 들어 "₩12500"이라는 금액을 "일만이천오백원"과 같이 표기하고자 할 때, MySQL에서 이 기능을 구현하는 방법에 대해 정리합니다.✅ 기본 전제MySQL은 기본적으로 숫자를 한글로 변환하는 내장 함수는 제공하지 않습니다. 따라서 다음과 같은 대안 중 하나를 사용해야 합니다:애플리케이션 레벨에서 처리 (권장)스토어드 함수나 프로시저로 직접 구현✅ 방법 1: 애플리케이션 레벨 처리 (PHP 예시)f..
MySQL 속도 측정을 위한 SQL_NO_CACHE
·
Programing/MySQL
설명 MySQL 5.3 버전의 GUI에서 실행된 쿼리가 캐싱되어 다음에 다시 실행할때 실행 속도가 줄어 정확한 속도 측정이 되지 않을때 SQL_NO_CACHE를 사용하면 실행할 때마다 캐싱 되지 않은 속도를 확인할 수 있다. 쿼리 캐시는 5.7.2 부터 사용되지 않으며, 8.0에선 제거되었기 때문에 다른 방법이 필요할 수 있다. 사용법 SELECT SQL_NO_CACHE * FROM `TABLE_NAME`; SELECT SQL_NO_CACHE `col_name` FROM `TABLE_NAME`; 기본 문법은 위와 같다.
mysql strip_tags function / html 제거 후 검색
·
Programing/MySQL
게시판의 내용 검색시 HTML 태그가 같이 검색되어, 사용자가 원하는 값을 정확하게 찾지 못하는 것을 방지 하기위해 아래와 같이 MySQL 사용자 함수를 등록해주고, CREATE FUNCTION `strip_tags`(s TEXT) RETURNS text CHARSET utf8 NO SQL BEGIN DECLARE start,end INT DEFAULT 1; LOOP SET start = LOCATE("", s, start); IF (!end) THEN SET end = start; END IF; SET s = INSERT(s, start, end - start + 1, ""); END LOOP; END 검색 시 아래와 같이 등록한 MySQL 함수를 이용한다. SELECT * FROM board WHER..
MySQL 변수값 IN() 검색? FIND_IN_SET() 함수 이용
·
Programing/MySQL
보통 아래와 같이 한개 필드에 여러 값을 검색할 경우 IN() 함수를 이용하여 검색한다.-- sample1SELECT * FROM tbl1 WHERE tbl1_idx IN(1,2) 아래와 같이 IN()들어가는 값이 사용자가 입력한것이 아닌 다른 테이블에서의 값을 이용해서 검색 하는 것이라면?-- sample2SELECT * ,@rows_idx := (SELECT GROUP_CONCAT(tbl2_idx) FROM tbl2) -- return value: '1,2'FROM tbl1 where tbl1_idx IN(@rows_idx) 위 쿼리는 얼핏보면 정상적인 결과 값이 표현되는 것 같지만 전혀 그렇지 않다.왜일까? sample1에서 검색하는 것은 "tbl1_idx IN(1,2)" 이고, sample2에서..
MySQL EXPLAIN 사용하여 Query 퍼포먼스 확인.
·
Programing/MySQL
EXPLAIN 을 사용하여 인덱스가 적절히 사용되고 있는지, 결과 값을 가지고 오기 위해 어떤 작업을 수행하는지 대략적으로 알 수 있다. EXPLAIN 은 SELECT문에 사용된 각 테이블당 하나의 행을 리턴한다. 나열된 순서는 MySQL이 쿼리 처리에 사용하는 순서대로 출력된다. MySQL은 모든 조인을 single-sweep multi-join 방식을 사용하여 처리하는데, 이것은 MySQL이 첫번째 테이블에서 한 행을 읽고, 두번째 테이블에서 매치되는 행을 찾고, 세번째 테이블에서 매치되는 행을 찾는 방식이다.모든 테이블들이 처리된 후 추출된 컬럼을 출력하고 다시 처음 테이블로 돌아가서 조인을 계속한다. 이런식으로 첫번째 테이블에 더이상 남는 행이 없을때까지 실행한다. STARTGHT_JOIN을 명시..
group_concat 다중 레코드를 한개 컬럼으로 출력.
·
Programing/MySQL
자꾸 잊어 버려서 기록 합니다. MySQL에서 Select시 멀티 레코드를 한개 컬럼으로 표현하는 방법입니다. 한개 컬럼으로 묶어서 쓰는건 concat()함수와 비슷합니다만, concat()함수는 단일 레코드에서 여러개의 컬럼을 묶어서 쓰는 것이고, group_concat()함수는 여러 래코드의 컬럼을 묶어 쓸때 사용합니다. Sample table : book_mast book_id book_name isbn_no cate_id aut_id pub_id dt_of_pub pub_lang no_page book_price BK001 Introduction to Electrodynamics 0000979001 CA001 AUT001 P003 2001-05-08 English 201 85.00 BK002 Un..
MySQL - 초성검색
·
Programing/MySQL
MySQL에선 한글 초성 부분을 따로 검색하지 않아도 자동으로 초성 검색이 되는 기능을 제공한다. (다른 dbms를 사용시 자음과 모음을 분리하여 검색 하는 부분이 있다. 이 부분은 나중에 다시 한번 포스팅 예정) 쿼리를 보자select * from table_name where col rlike '^(ㄴ)' or (col >= '나' and col < '다') order by col
MySQL
·
Programing/MySQL
많은양의 쿼리를 한꺼번에 처리할때 SQL에러가 나는데 이를 해결해 주기 위한 쿼리 (오래전에 했던거라 어떤 에러인지는 가물가물하다 -_-a) mysql> SET GLOBAL max_allowed_packet=1000000000; Query OK, 0 rows affected (0.00 sec) mysql> SET GLOBAL net_buffer_length=1000000; Query OK, 0 rows affected (0.00 sec)
mysql 백업 및 복구
·
Programing/MySQL
백업 mysqldump -u username -p DatabaseName > Filename.sql 복구 mysql -u username -p DatabaseName