Advertisement

More Related Content

Slideshows for you(20)

Advertisement
Advertisement

MySQL 인덱스의 기초

  1. 데이터베이스베이직인덱스 NHN NEXT 정호영 나눔고딕및나눔고딕코딩글꼴을설치해주세요.
  2. 데이터베이스의인덱스 테이블에대한동작의속도를높여주는자료구조
  3. 데이터베이스의인덱스 테이블에대한동작의속도를높여주는자료구조 사실은 Insert,Update,Delete속도를희생하여 읽기속도를높임
  4. 인덱스실험1 1.indexdb.sql실행 2.200만건의레코드삽입 LOAD DATA LOCAL INFILE 'test.csv' INTO TABLE user FIELDS idENTIFIEDBY ',' IGNORE 1 LINES;
  5. 쿼리수행 1.indexdb.sql실행 2.200만건의레코드삽입 SELECT COUNT(*) FROM user WHERE id LIKE 'M%'; SELECT COUNT(*) FROM user WHERE id LIKE '%1'; SELECT COUNT(*) FROM user WHERE money = 1000; SELECT COUNT(*) FROM user WHERE last_visit> '2014-05-17';
  6. 쿼리마다성능이다른이유는? 특정칼럼에대해인덱스가자동으로만들어짐 PRIMARYKEY인덱스자동생성 FOREIGNKEY에도인덱스자동생성
  7. 인덱스확인해보기 SHOW INDEX FROM user;
  8. 직접인덱스만들어보기 CREATE INDEX idX_user_1 ON user(last_visit);
  9. 다시쿼리실행 SELECT COUNT(*) FROM user WHERE id LIKE 'M%'; SELECT COUNT(*) FROM user WHERE id LIKE '%1'; SELECT COUNT(*) FROM user WHERE money = 1000; SELECT COUNT(*) FROM user WHERE last_visit> '2014-05-17'; SELECT COUNT(*) FROM user WHERE last_visit<> '2014-04- 15';
  10. 데이터삭제후다시삽입 데이터삭제후다시삽입 삭제에오랜시간이걸립니다. 데이터삽입시간도더길어졌습니다. 왜그런차이가생겼을까요?
  11. 데이터삭제후다시삽입 Bulkinsert를할때는 (1)인덱스제거–데이터삽입-인덱스재생성 (2)인덱스일시중지–데이터삽입-인덱스활성화 를사용할수있는데,(1)번이더빠릅니다.
  12. 인덱스일시중지 ALTER TABLE user DISABLE KEYS; LOAD DATA … ALTER TABLE user ENABLE KEYS;
  13. 복합인덱스만들기 여러컬럼을묶어서인덱스를만들수도있습니다. DROP INDEX idX_user_1 ON user; CREATE INDEX idX_user_2 ON user(last_visit, money);
  14. 복합인덱스성능실험 SELECT COUNT(*) FROM user WHERE last_visit> '2014-05-15'; SELECT COUNT(*) FROM user WHERE last_visit> '2014-05-15' AND money > '5000'; SELECT COUNT(*) FROM user WHERE money = '5000'; SELECT COUNT(NAME) FROM user WHERE last_visit<> '2014-05- 15' AND money ='5000'; SELECT COUNT(NAME) FROM user WHERE last_visit='2014-05- 15' AND money ='5000';
  15. 복합인덱스실험 복합인덱스는순서가중요 첫번째조건을활용할수없다면복합인덱스는 사용이불가능합니다.
  16. 인덱스의종류 물리적저장구조에따라 ClusterdIndex SecondaryIndex(Non-clusterdIndex) 논리적저장구조에따라 UniqueIndex Non-uniqueIndex
  17. ClusteredInex 클러스터드인덱스는 사실인덱스가아니라저장구조그자체 B+트리를사용 리프노드:실제레코드(데이터페이지) 키:PRIMARYKEY값
  18. SecondaryIndex 직접인덱스를만들면세컨더리인덱스를생성 세컨더리인덱스의구조는 B+트리를사용 키:인덱스를생성한컬럼 리프노드:해당레코드의PRIMARYKEY값을저장 실제데이터를찾으려면인덱스를두번찾아야함
  19. FullTextSearch 성능이좋지않은자연어검색(FullTextSearch)을지원 없는것보다나은정도? 보통게시판등에자주사용됩니다. InnoDB도지원됩니다! FullText인덱스를먼저만들어야사용가능합니다.
  20. FullTextIndex만들기 CREATE FULLTEXT INDEX idX_FT1 ON TTT(TITLE, BODY);
  21. FullTextIndex사용하기 SELECT BODY, MATCH(BODY) AGAINST(‘마르고닳도록’) FROM TTT SELECT * FROM TTT WHERE MATCH(BODY) AGAINST (‘백두산이닳도록’);
  22. 한국어검색 FULLTEXT는mysql이적합하지않은것같습니다. 전문검색엔진을사용하는것이좋습니다. -스핑크스 -루씬
  23. THANK YOU!!!
Advertisement