MySQL 성능 최적화를 위한 기초 가이드

MySQL을 사용하는 프로젝트가 많아지면서 데이터베이스 성능은 개발자의 중요한 고민 중 하나입니다. 이번 포스트에서는 MySQL의 성능을 기초적으로 최적화하는 방법을 소개합니다. 1. 인덱스(Index) 설정과 최적화 인덱스는 데이터 조회 속도를 현저히 높여줍니다. 자주 조회하는 컬럼에 인덱스를 설정합니다. 인덱스는 과도하게 생성하면 삽입, 수정, 삭제 성능이 떨어지므로 적정 수준을 유지합니다. 예시: CREATE INDEX idx_user_email ON users(email); 2. 느린 쿼리(Slow Query)…

회사 동일 다수 DB 관리

회사 동일 다수 DB 관리
DB 가 분리되어 있지만 모두 동일한 DB 일 경우에 컬럼을 동일하게 변경하기 위해서 필요함.먼저 대상이 되는 DB를 수집후 테이블 명을 보고 컬럼을 변경을 할수 있습니다. 각 DB에서 테이블 정보를 수집도 가능합니다. 테이블을 추가 할 경우 다수의 DB에서 동일한 작업이 필요할 경우에 추가를 진행하면은 동시에 다수를 작업을 합니다. 테이블을 한곳에 만들어 두거나 혹은 특정 DB에서 필요한…

MySQL 정렬 특정 단어를 우선순위에 두기

MySQL을 이용할 경우에 정렬을 사용할때가 있습니다. 문자를 숫자로 변형해서 하기도 하고 Abc순으로 할 수도 있고 가나다 방법등 다양하게 사용을 할 수 있습니다. 보통의 방법으로 오름차순, 내림차순 정렬을 사용하면은 원하는 결과물에 대해서 정렬을 해서 목록을 만들수 있습니다. 하지만, 특정 단어가 목록중에서 가장 최상단에 와야 하는 경우라는 보통의 방법으로는 할 경우에는 WHERE 조건후에 다른것까지 붙이다 보면은 원하는…

MySQL 시간정보로 조회

// 1분전 데이터 조회 SELECT * FROM 테이블명 WHERE 시간칼럼명 >= DATE_ADD(NOW(), INTERVAL -1 MINUTE) // 10분전 데이터 조회 SELECT * FROM 테이블명 WHERE 시간칼럼명 >= DATE_ADD(NOW(), INTERVAL -10 MINUTE); // 한시간전 데이터 조회 SELECT * FROM 테이블명 WHERE 시간칼럼명 >= DATE_ADD(NOW(), INTERVAL -1 HOUR); // 하루전 데이터 조회 SELECT * FROM 테이블명 WHERE 시간칼럼명…

MySQL 스키마 변경 프로그램

MySQL 스키마 변경 프로그램
웹 개발을 하다 보면은 동일한 내용을 DBTable를 생성하고 복제를 하는 일이 많이 발생을 하기 마련입니다. 모든 사이트가 동일하지는 않지만 관리를 위해서라도 서버마다 다를수 있어서 한번에 변경할려니 DB툴을 가지고 하는것도 작업 시간이 늘어나는 일이 이고 해서 한번에 바꿀수 있도록 만들게 되었습니다. 개발자에 따라서 여러가지 프로그램으로 제작을 하지만 저는 C#을 이용하여서 GUI 화면에서 보면서 지금것은 어떤지 실시간으로…

[CSharp] MySQL 접속 처리

using (dbConnection = new MySqlConnection("Server={0}Port={1};Database={2};Uid={3};Pwd={4}")) { try { /* INSERT, UPDATE 처리 */ dbConnection.Open(); dbQuery = string.Format("UPDATE `table` SET colume = '{0}' WHERE idx = '{1}'", VALUE, IDX); dbConnection.Open(); dbCmd = new MySqlCommand(dbQuery, dbConnection); dbCmd.ExecuteNonQuery(); dbConnection.Close(); /* bind 형식 */ dbConnection.Open(); dbQuery = "INSERT INTO log (`content`,`ip`,`creator`) VALUES (@content,@ip,@creator); "; dbCmd = new MySqlCommand(dbQuery, dbConnection);…

MySQL 엑셀로 산출물 만들기

문서를 작성해야 하는 일이 항상 있습니다. 그중에서 가장 귀찮은 일이 MySQL의 DB의 형식이나 현재 어떤 스키마를 가지고 있는지를 문서를 만드는 일이 정말 귀찮습니다. 물론 처음 문서를 작성하고 나서 큰 변화가 없다면은 다행이지만 항상 똑같은 상태라고 할 수가 없다 보니 매번 문서를 만들어야 하는 일이 정말 귀찮기만 할뿐입니다. 그렇다고 매번 Database에 들어가서 명령어를 실행하고 만드는것도 일입니다.…

단일 테이블에서 실시간 가동률 뽑기

단일 테이블에서 실시간 가동률 뽑기
일단 하기는 하였는데, 말이 안된다고 생각함! 문제가 뭐냐 하면은 모니터링 데이터를 제가 가공하는것이 아니라, 누군가 가동해 놓은 데이터를 가지고 실시간으로 전달해주는 행단위로 입력된것으로 데이터를 뽑습니다. 위와 같은 화면을 뽑기 위해서 처리해야 될 일은 많지만 이미 내가 만들지 않았고, 있는 정보를 가지고 처리를 해야 합니다. 위와 같은 형식으로 행단위로 엄청나게 쌓이기 시작합니다. 매일 몇초 단위로 데이터가…

MySQL 트리거를 통해서 프로시저의 동적 쿼리 실행

결론부터 말하면은 대실패 입니다. 의도한대로 전혀 움직이지 않습니다. 그렇기에 MySQL에서는 절대 하지 마십시오. 물론 다른 DBMS인 오라클, MSSQL은 어떤지 아직 직접해보지 않아서 정확히는 모릅니다. 하지만 제가 테스트한 MySQL에서는 전혀 실행이 되지 않습니다. 실패라고 하여도 과정에 대해서 일단 간단히 작성해 놓고 추후에 이런 일이 있으면 교본을 삼으려고 글을 남깁니다. 요구조건1. INSERT 시에 해당 값을 trigger를 통해서…

MySQL 에서 ON DUPLICATE KEY UPDATE 사용시 last_insert_id 값 획득

MySQL에서 Insert, Update를 동시에 할 수 있게 해주는 "ON DUPLICATE KEY UPDATE" 쿼리를 사용할 경우 last_insert_id 결과값을 정상적으로 가져오지 못할 경우가 생기기 마련이다. 이 문제를 해결 하기 위해서는 해당 Table의 컬럼중 "AUTO_INCREMENT" 지정된 컬럼을 가져오면 된다. 쿼리의 예를 들면 다음과 같다. INSERT INTO test(name, age) VALUES ('이름', '19') ON DUPLICATE KEY UPDATE name='이름', age='19', expr=last_insert_id(idx);…