index 설정하는 이유

 - 조회 속도 개선

 


 

상황

 - 테이블명: PRODUCT

 - 설정된 key: id_a, id_b, date

 

 - id_a 와 id_b 를 조합하여 조회하는 경우가 많은데, 속도 개선을 하고자 함

 


 

DB 명령어로 처리하는 방법

 

1. 복합 인덱스 추가

CREATE INDEX idx_idA_idB ON PRODUCT (id_a, id_b);

2. 쿼리 실행 계획 확인

인덱스를 추가한 후 쿼리의 실행 계획을 확인하여 인덱스가 실제로 사용되는지 확인할 수 있음

EXPLAIN SELECT * FROM PRODUCT WHERE id_a = 111 AND id_b = 222;

3. 결과 확인 및 추가 최적화

EXPLAIN 결과에서 인덱스가 사용되고 있는지 확인됨

 

 


 

phpMyAdmin 환경에서 처리하는 방법

 

1. phpMyAdmin에 로그인

웹 브라우저를 열고 phpMyAdmin에 로그인합니다.

2. 데이터베이스 및 테이블 선택

  1. 왼쪽 패널에서 복합 인덱스를 추가할 데이터베이스를 선택
  2. 해당 데이터베이스 내에서 PRODUCT 테이블을 클릭

3. 인덱스 추가

  1. 상단 탭에서 "Structure"(구조) 를 클릭
  2. 하단으로 스크롤하여 "Indexes" 섹션으로 이동
  3. "Add index" 링크를 클릭 (또는, Create an index on  1 columns 실행 클릭)

4. 복합 인덱스 설정

  1. "Index name" 필드에 인덱스 이름을 입력 (예: idx_idA_idB).
  2. "Type" 필드에서 "INDEX"를 선택
  3. "Columns" 필드에서 id_a와 id_b를 선택. 복합 인덱스이므로 두 컬럼을 선택
  4. "Save" 버튼을 클릭하여 인덱스를 추가

5. 결과 확인 및 추가 최적화

EXPLAIN 결과에서 인덱스가 사용되고 있는지 확인됨

'maria DB' 카테고리의 다른 글

mariaDB 설치  (0) 2023.06.05

 

 

시놀로지 NAS 에 연결된 IP 주소 얻는 법

 

- 제어판 - 네트워크 - 네트워크 인터페이스

 

위 메뉴에서 확인가능

 

 

시놀로지 NAS에서 wordpress 설치시,

비밀번호를 입력하라는 항목이 나오는데,

 

비밀번호는 mariaDB의 비밀번호와 일치해야 한다

 

 

'NAS' 카테고리의 다른 글

NAS에 연결된 IP 주소 정보 얻는 법  (0) 2023.10.03
nplayer 에서 synology NAS 접근이 안될 때  (0) 2023.08.19

 

 

잘 되던 nplayer 에서 NAS 접근하려 했더니

couldn't connect to server 라는 알림창과 함께 접속이 되지 않음

 

Synology에 접속해보니,

WebDAV Server 패키지 프로그램이 '수리 필요' 단계였음

 

[수리]버튼 클릭했고, 업데이트 된 후에 nplayer에서 정상 접근됨

 

아주 간단히 해결

 

참고 URL

https://youtu.be/zOropZAzviQ

 

 

 

 

아래 버전으로 설치 진행했음

 

https://mariadb.org/download/?t=mariadb&p=mariadb&r=10.6.13&os=windows&cpu=x86_64&pkg=msi&m=blendbyte 

 

Download MariaDB Server - MariaDB.org

REST API Release Schedule Reporting Bugs … Continue reading "Download MariaDB Server"

mariadb.org

 

 

 

위 유투브 내용

1. mariaDB 검색하여, mariaDB 설치파일 다운로드

2. 설치 파일 클릭하고, 적절한 설정하여 설치 완료

3. cmd 에서 mysql -V 명령어로 설치 확인 -> 경로설정 안되어 있어 명령어 인식 못함

4.내 PC - 속성 - 고급 시스템 설정 - 환경변수 에서

   사용자 변수 - Path 선택 후 편집 클릭하여

   mariaDB 설치된 bin 폴더 경로를 추가

5. cmd 에서 mysql -V 명령어로 설치 확인

 

 

'maria DB' 카테고리의 다른 글

key 2개 이상 조합, index 설정방법  (0) 2024.07.14

 

참고한 강의

 - Spring Boot 개발 환경 구축하기

 - Spring Boot (스프링 부트)를 비주얼 스튜디오 코드로 개발하기

 - 강사님 : 박용준

 

 


 

window 10 에서 진행함

 

 

설치할 프로그램 목록

 - Visual Studio Code

 - the Java Development Kit (JDK)

 - essential Java extensions

 

위 3개를 간단히 하나의 프로그램으로 설치하는데 아래 URL을 통해

해당 프로그램을 다운로드 받음

 

https://code.visualstudio.com/docs/java/java-tutorial

 - [ Install the Coding Pack for Java - Windows ] 버튼을 클릭하여 프로그램을 다운로드 받고,

    해당 파일을 실행하여 설치 시작

 

 

 

 - Next 버튼 클릭

 

 - Install 버튼 클릭

 

 

 

설치완료

위 Finish 버튼을 클릭하면, 아래처럼 Visual Studio Code 첫 실행화면을 볼 수 있음

 

'Spring Boot' 카테고리의 다른 글

Spring Boot 란?  (0) 2023.03.05

 

Spring Boot 란?

 

자바(Java) 기술을 사용하여 웹 응용프로그램을 제작할 수 있는 프레임 워크

즉, Java 개발환경인 JVM(Java Virtual Machine) 위에서 돌아가는 웹 프레임 워크

 

 

 

Spring Boot 를 왜 사용하는가?

 

Spring 을 이용하려면 다양한 설정을 해줘야 하는데,

사용자(개발자) 입장에서는 실행환경, 의존성 관리 등이 쉽지가 않아서

그런 부분을 자동화하여 좀 더 쉽게 Spring을 이용할 수 있도록 도와주는 도구 역할이다

 

 

 

십진수를 이진수로 변환했을 때, 1의 개수 구하는 방법

 

 

1. 비트 AND 연산을 사용하는 방법

// 비트 AND 연산 활용방법

// 자연수 n이 주어졌을 때
// n 이 2의 20승보다 작은 경우로 가정 (아래 for문에서 20으로 범위를 잡은 이유)

int cnt = 0;

for (int i=0; i<20; i++)
{
	// i 만큼 shift 하며 비트 AND연산하여, 1이 있는 경우 ++
	if (n & 0x01 << i)
		cnt++;
}

 

 

2. bitset 사용하는 방법

// bitset 활용방법

// 자연수 n이 주어졌을 때
// n 이 2의 20승보다 작은 경우로 가정 (아래 for문에서 20으로 범위를 잡은 이유)

#include <bitset>
using namespace std;

// bitset 중에서 1인 비트의 개수를 반환
int cnt = bitset<20>(n).count();

 

bitset 사용 참고사이트

https://hellowoori.tistory.com/52

 

STL bitset

STL bitset STL bitset 이란? bitset 헤더파일에서 제공하는 STL로써, 고정된 크기의 N비트 배열을 나타낸다. 이때 채워진 것은 true로 1이며,  채워지지 않은 것은 false이며 0이다. 컴파일시 비트셋의 크기

hellowoori.tistory.com

 

bitset 사용법

헤더파일 #include <bitset>
선언 bitset<할당할 비트 수> 변수명
[n] n + 1 번째(인덱스 n)비트가 1인지 0인지 검사
.test(n) n + 1 번째(인덱스 n)비트가 1인지 0인지 검사
.all() 모든 비트(all)가 1이면 1(true) 그렇지 않으면 0(false)을 반환
.any() bitset 중 하나라도(any) 1이면 1(true)을 반환
한 개라도 1이 없다면, 즉 모두 0일 때 0(false)을 반환
.none() bitset 중 1이 하나도 없다면(none), 즉 모두 0이면 1(true)을 반환
.count() bitset 중에서 1인 비트의 개수를 반환
.size() bitset의 크기를 구한다
.set() 전체 비트를 1로 셋팅
.set(n, true/false) n + 1번째(인덱스 n)비트를 1(true)또는 0(false)으로 셋팅
.reset() 전체 비트를 0으로 리셋
.flip 전체 비트를 토글. 0은 1로, 1은 0으로
.flip(n) n + 1 번째(인덱스 n)비트를 토글. 0은 1로, 1은 0으로
.to_string() 전체 비트를 string화 시킨다
.to_ulong() / .to_ullong() 전체 비트를 unsigned long / unsigned long long의 값으로 바꿔준다
operator&=
operator|=
operator^=
operator~
AND, OR, XOR and NOT 비트 연산을 수행
operator<<=
operator>>=
operator<<
operator>>
left shift연산과 right shift 연산을 수행

 

 

간단한 예를 들어,

5 라는 숫자가 있을 때,

 

연속된 숫자의 합이 5가 되는 개수는?

 - 2+3 = 5

 - 5 = 5

 

총 2개의 케이스가 나온다.

 

위 케이스가 몇 개인지 구하는 알고리즘

 

// 연속된 숫자의 합을 구하는 함수
// 예를들어, 1~10까지 합을 구하려면
//           (10-1+1)/2 * (10+1) 을 해주면 된다.
// 풀이하자면, 1+10, 2+9, 3+8, 4+7, 5+6 이렇게 11이 5개가 있기 때문에
//            위 방식을 아래의 수식으로 풀어서 연산량을 줄인다.
int sum_continue_num(int a, int b){
    return (b - a + 1)/2 * (a + b);
}


// 주어진 자연수 n이 있을 때,
// 연속된 자연수의 합이 몇 개 있는지 계산하는 로직
int solution(int n) {
    int answer = 0;
    
    // 이중 loop
    // 1부터 n까지 더해가는 과정을 체크해본다
    for(int i=1 ; i <= n ; i++){
        for(int j=i ; j <= n ; j++){
        
        	// 연속된 자연수의 합이 주어진 n보다 커지면,
            // 그 뒤에 더해지는 숫자는 의미없으므로 break로 넘어감
            if( sum_continue_num(i,j) > n ){
                break;
            }
            
            // 연속된 자연수의 합이 일치하면 정답을 더함
            if( sum_continue_num(i,j) == n ){
                answer++;
                break;
            }
        }
    }
    
    
    return answer;
}

 

 

 

위 알고리즘은 정직한 알고리즘이다.

주어진 문제에 맞게 정직하게 짜여진 알고리즘

 

그런데 아래와 같은 공식이 있다고 한다.

- 연속된 자연수의 합의 개수 = 홀수 약수의 개수

 

???

 

 

 

▶ 프로그래머스 어느 답글 가져옴

주어진 자연수를 x라 하고, a, b, c, d, k, n은 자연수라고 가정

 

1) x를 홀수개의 연속된 자연수의 합으로 표현할 수 있는 경우

 - 1개 : b => 1*b [단, b >= 1]

 - 3개 : b-1, b, b+1 => 3*b [단, b >= 2] 

- 2a-1개 : b-(a-1), … b, …, b+(a-1) => (2a-1)*b [단, b >= a] 

 

2) x를 짝수개의 연속된 자연수의 합으로 표현할 수 있는 경우

 - 2개 : d-1, d => 1*(2d-1) [단, d >= 2] 

- 4개 : d-2, d-1, d, d+1 => 2*(2d-1) [단, d >= 3] 

- 2d개 : d-c, …, d, …, d+(c-1) => c*(2d-1) [단, d >= c+1] 

 

3) 1)과 2)를 합쳐서 표현하면 

- x = (2k-1)n [단, n>=k이면 홀수개, n]

 

 

▶ 프로그래머스 어느 답글 가져옴 2

 n이 3개의 연속된 자연수(i-1, i, i+1)의 합으로 표현된다면 합은 3i가 됨

즉, n은 3의 배수

마찬가지로 5개의 연속된 자연수의 합으로 n이 표현이 된다면 n은 5의 배수

따라서, n의 약수 중 홀수가 몇개있냐는 문제와 같은 문제

 

 

▶ 프로그래머스 어느 답글 가져옴 3

https://gkalstn000.github.io/2021/01/21/%EC%88%AB%EC%9E%90%EC%9D%98-%ED%91%9C%ED%98%84/

 

숫자의 표현

Content

gkalstn000.github.io

 

 

과정은 모르겠고

결론은 아래 알고리즘이 답이 된다

    for (int i = 1; i <= num; i += 2) {
        if (num % i == 0) {
            answer++;
        }
    }

 

C++ vector 를 정렬하거나, 역순으로 돌리고자 할 때

 

 

작은 것을 맨 앞으로, 순차적으로 정렬하고자 할 때

sort(a.begin(), a.end());

 

 

 

역순으로(큰 것을 맨 앞으로) 정렬하고자 할 때

begin -> rbegin 으로 변경해주면 된다.

 

sort(a.rbegin(), a.rend());

 

 

정렬은 하지 않고,

단순히 현재 순서를 역순으로 변경하고자 할 때

reverse(a.begin(), a.end());

 

 

 

 

vector의 begin(), end() 는 시작과 끝을 가르키는 것으로

sort, reverse 에서 파라미터로 입력되는 부분은 범위를 지칭한다.

 

만약에 한 vector a 가 10개의 구성요소로 이뤄져있을 때,

맨 처음부터 절반만 sort 하고 싶은 경우

sort(a.begin(), a.begin()+5) 이렇게 범위를 지정해주면 된다.

 

#include <algorithm>
#include <vector>


int test(vector<int> a)
{
	// a 가 { 1, 3, 2 } 인 경우,

	sort(a.begin(), a.end());
	// 위 로직후, a 의 결과
	// { 1, 2, 3 }


	sort(a.rbegin(), a.rend());
	// 위 로직후, a 의 결과
	// { 3, 2, 1 }


	reverse(a.begin(), a.end());
	// 위 로직후, a 의 결과
	// { 1, 2, 3 }
    
}

+ Recent posts