Index 4

MySQL Index 설계 방법 With Cardinality(무조건 Cardinality가 높아야 할까에 대한 고찰)

MySQL Index 설계 방법 With Cardinality(무조건 Cardinality가 높아야 할까에 대한 고찰)Cardinality 란 무엇인가?컬럼에 저장된 고유한 값의 개수즉, 전체 데이터의 개수에 비해 고유한 값의 수가 얼마나 되는지를 나타낸다.카디널리티가 높다 : 고유한 값이 많다(겹치지 않는 데이터가 많다.)카디널리티가 낮다 : 고유한 값이 적다(겹치는 데이터가 많다.)그러면 이게 어떤 역할일까?인덱스를 사용하는 목적은 검색 속도의 상승이다.인덱스를 만들 때에 Cardinality 를 고려하면(인덱스를 통해 검색할 데이터의 선택도를 고려한다면) 검색 속도를 상승시킬 수 있다.옵티마이저는 쿼리 문법을 분석하고 의미를 해석할 때, 테이블 크기, 행 수, 컬럼의 Cardinality, 값의 분..

부분 인덱스

부분 인덱스그냥 간단하게 말하자면 인덱스 기준을 전체가 아니라 일부분에만 거는 것이다.이게 뭐임말 그대로 부분적인 인덱스개발할 때에 MySQL 에서 VARCHAR(255) 이런 식으로 좀 큰 데이터를 사용하는 경우가 있는데, 이런 큰 값에 대해 인덱스를 걸어주는건 힘들다.근데 이거 뒤에까지 다 쓰지는 않지만 앞부분에 대한 검색이 종종 일어날 수는 있다.장점인덱스 크기 설정 가능일부분에 대해서만 인덱스를 생성하기 때문에저장 공간이 절약된다.인덱스 조회 속도가 향상된다.인덱스 생성할 때에 시간소요가 줄어든다.말하자면, 그냥 작은 인덱스를 만들기 때문에 전체를 다 만드는 것 보다 확실히 공간이나 속도 면에서 장점이 있다는 것이다.단점?인덱스 크기를 설정해서 발생일부분에 대해서만 인덱스가 생성되기 때문에유니크 ..

MySQL 페이징 해보자(feat offset, infinite scroll)

보통 개발할 때에 반드시 공부하고 적용하는게 페이징일 것 같다. 그리고 아마... 처음에는 offset limit을 써서 적용을 할 것 같다. 이 offset limit에 대해, 그리고 offset limit의 문제점에 대해, 해결 방안에 대해 써보려고 한다. 일단은 간단한 테스트를 위해 CREATE TABLE board ( id INT AUTO_INCREMENT PRIMARY KEY, title VARCHAR(255) NOT NULL, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, heart INT DEFAULT 0 );이런 테이..

MySql 인덱스 - 기본 개념

MySQL 인덱스 실무에서 엄청나게 중요한녀석임... 이를 사용해서 select를 할 때에 데이터를 빠르게 응답하도록 할 수 있음! 사실 인덱스를 한다고 뭐 쿼리가 바뀌는건 아니다. 그냥 이걸 통해 속도를 빠르게 하는거임. 데이터베이스를 빠르게 하도록 하는 "튜닝" 에서 가장 핵심적인 것이 인덱스이다. 물론 막 쓰면 오히려 성능을 떨어뜨릴 수도 있다. 그래서 일단 인덱스의 개념이랑 활용 등을 찾아보도록 한다. 인덱스 개념 예를 들어 데이터베이스에 사람 이름 키 몸무게 을 갖는 테이블이 있을 때 1 류찬 178 70 2 김찬 189 99 3 박찬 140 39 4 이찬 180 34 5 반찬 200 50 6 징기스찬 160 50 7 가슴이벅찬 390 34 요런 식으로 있다고 하자. (일단 동명이인은 없다고 가..