- 1981λ μ μ μ¬ν μ¬μλ€ μ€, μ΄λ¦μ 'A'κ° ν¬ν¨λμ§ μμ μ¬μμ μ΄λ¦κ³Ό μ μ¬μΌμ, μ μ¬μΌ κΈ°μ€ λ΄λ¦Όμ°¨μμΌλ‘ κ²μ
- 12μμ μ
μ¬ν μ¬μλ€ μ€, κΈμ¬κ° 2000 μ΄μμΈ μ¬μ κ²μ
β μΆλ ₯:μ΄λ¦,μ μ¬μΌ,κΈμ¬ - μ μ¬ μμ΄ 2μμ΄κ³ , λΆμλ²νΈκ° 30μΈ μ¬μμ μ¬λ², μ΄λ¦, κΈμ¬ κ²μ
- μ¬μλͺ μ 'A'κ° ν¬ν¨λκ³ , μ μ¬ μ°λκ° 1981λ λλ 1987λ μΈ μ¬μ κ²μ
LIKE,NOT LIKE: λ¬Έμμ΄ ν¬ν¨ μ¬λΆ νλ¨BETWEEN A AND B: λ²μ 쑰건ORDER BY: μ λ ¬ (μ€λ¦μ°¨μ / λ΄λ¦Όμ°¨μ)- (곡ν΅)λ μ§ μ‘°κ±΄ μ‘°ν ν¨μ
YEAR(hiredate) -- μ°λ μΆμΆ
MONTH(hiredate) -- μ μΆμΆ
DAY(hiredate) -- μΌ μΆμΆ-- λ μ§ β λ¬Έμμ΄λ‘ μΆμΆ
TO_CHAR(hiredate, 'YYYY') -- μ°λ
TO_CHAR(hiredate, 'MM') -- μ
TO_CHAR(hiredate, 'DD') -- μΌ
-- λ¬Έμμ΄ β λ μ§λ‘ λ³ν
TO_DATE('20250708', 'YYYYMMDD')
TO_DATE('2025-07-08', 'YYYY-MM-DD')EXTRACT(YEAR FROM hiredate)
EXTRACT(MONTH FROM hiredate)
EXTRACT(DAY FROM hiredate)μ°μ²΄ μ΄λ ₯ λ°μ΄ν°λ₯Ό κΈ°λ°μΌλ‘ νν°μ λ λ°©μ(RANGE, LIST, HASH λ±)μ μ μ©νκ³ , λ°©μλ³ μΏΌλ¦¬ μ±λ₯μ λΆμν νλ‘μ νΈμ λλ€.
| μ΄μ ν | κΉλλ―Ό | μ΄κΈ°ν | μ₯μ‘ν |
|---|---|---|---|
| lyjh98 | kddmmm | GIHYUN-LEE | jangongha |
- λ Όλ¦¬μ μΌλ‘λ νλμ ν μ΄λΈμ, 물리μ μΌλ‘ μ¬λ¬ ν μ΄λΈλ‘ λλμ΄ κ΄λ¦¬νλ κΈ°λ²
- λμ©λ ν μ΄λΈμ λΆν νμ¬ μ±λ₯ ν₯μ λ° κ΄λ¦¬ μ©μ΄μ± ν보 λ±μ ν¨κ³Όκ° μλ€.
- νν°μ λ νμ΅
- MySQL νν°μ
λ λ°©μ(
RANGE,LIST,HASH,KEY) μ΄ν΄ - νν°μ
λ λ°©μλ³
PROCEDUREλ₯Ό ν΅ν΄ μ±λ₯ μ°¨μ΄ λΉκ΅ λ° λΆμ
| κ΅¬λΆ | λ΄μ© |
|---|---|
| μΈ‘μ νλͺ© | 쿼리 μ€νμκ° |
| μΈ‘μ λμ | μΌλ° ν
μ΄λΈ λ° νν°μ
λ μ μ© ν
μ΄λΈ 8κ° (Range,List,Hash,Key,Range-Hash,Range-Key,List-Hash,List-Key) |
| λΉκ΅ 쑰건 | 1. νν°μ
λ μ μ© μ 무μ λ°λ₯Έ μ°¨μ΄ 2. λ¨μΌ νν°μ λ λ°©μλ³ μ°¨μ΄ 3. λ³΅ν© νν°μ λ λ°©μλ³ μ°¨μ΄ |
| μ¬μ 쑰건 | λμ ν μ΄λΈ 9κ°μ λμΌν λ°μ΄ν°(10λ§κ±΄) μ½μ |
| μ λ ₯ 쑰건 | λμΌ μ‘°ν쿼리 500ν λ°λ³΅ μ λ ₯ |
| μ Β Β Β Β Β Β Β Β μ°¨ | 1. λμ ν
μ΄λΈμ μ
λ ₯ 쑰건 3ν μ€ν 2. QueryManagerλ‘ μ€νμκ° νκ· κ° λμΆ 3. Mysqlμλ² μ¬μμ 4.λλ¨Έμ§ ν μ΄λΈμ λ°λ³΅ μ€ν |
- DBMS: MySQL 8.2.0
- Tool: DBeaver, MySQL
- OS: Windows 10 / Ubuntu 22.04
λ°μ΄ν° μΆμ²: https://www.aihub.or.kr μ κΈμ΅ λ°μ΄ν°(νμμ 보, μμ‘μ 보) μ΄μ©
λ°μ΄ν° ν¬κΈ° : μ΄ 100,000건 | νμΌ ν¬κΈ° : 5.6MB (.csv, UTF-8 μΈμ½λ©)
1. pythonμ μ΄μ©ν ν
μ΄λΈ μμ±
μ¬μ©μλ³ μ°μ²΄ μνλλ₯Ό νμνκΈ° μν΄ μ°μ²΄ κ΄λ ¨ 컬λΌ(μΌμ, μμ‘ λ±)κ³Ό νμμ 보λ₯Ό μΆμΆνμ¬ λ³ν©
2. λ°κΈνμλ²νΈ format
λ°κΈνμλ²νΈμ κ°μ΄ SYN_0ννμ varcharνμ
μΌλ‘ μ 곡λμ΄ μμ΄ INT νμμΌλ‘ ν¬λ©§
-- SYN_0 μΌλ‘ μ 곡λ κ° -> 0 μΌλ‘ λ³κ²½
UPDATE real_dataset SET λ°κΈνμλ²νΈ = REPLACE(λ°κΈνμλ²νΈ, 'SYN_', '');
-- 0,1,2 .. μΌλ‘ λ³κ²½λ κ° INT νμ
μΌλ‘ νμ
λ³κ²½
ALTER TABLE real_dataset MODIFY COLUMN λ°κΈνμλ²νΈ INT;3. PK μ€μ
νν°μ
λ° μλΈνν°μ
KEYλ‘ μ¬μ©νκΈ° μν΄ λ³΅ν©PK μ€μ
-- λ°κΈνμλ²νΈ, μ°μ²΄μ°λ primary keyλ‘ λ±λ‘
ALTER TABLE real_dataset ADD PRIMARY KEY (λ°κΈνμλ²νΈ, μ°μ²΄μ°λ);4. λ°μ΄ν° μ½μ
-- ν
μ΄λΈλ³ λ°μ΄ν° μ½μ
INSERT INTO νν°μ
ν
μ΄λΈλͺ
(λ°κΈνμλ²νΈ, λ¨λ
ꡬλΆμ½λ, μ°λ Ή, κ±°μ£Όμλλͺ
, μμ€νμ_μΌμλΆ_B0M, μ°μ²΄μΌμ_B0M, μ°μ²΄μμ‘_B0M, μ°μ²΄μμ‘_μΌμλΆ_B0M, μ°μ²΄μμ‘_ν λΆ_B0M, μ°μ²΄μ°λ)
SELECT λ°κΈνμλ²νΈ, λ¨λ
ꡬλΆμ½λ, μ°λ Ή, κ±°μ£Όμλλͺ
, μμ€νμ_μΌμλΆ_B0M, μ°μ²΄μΌμ_B0M, μ°μ²΄μμ‘_B0M, μ°μ²΄μμ‘_μΌμλΆ_B0M, μ°μ²΄μμ‘_ν λΆ_B0M, μ°μ²΄μ°λ
FROM real_dataset;| 컬λΌλͺ | λ°μ΄ν° νμ | λ°μ΄ν° νμ |
|---|---|---|
| λ°κΈνμλ²νΈ | INT (PK) | 0 ,1, 2... |
| μ°μ²΄μ°λ | INT (PK) | 2000,2001... |
| μ°μ²΄μΌμ_B0M | DATE | 2002-02-10, 2024-10-30, ... |
| λ¨λ ꡬλΆμ½λ | INT | 1(λ¨),2(μ¬),1(λ¨),... |
| μ°λ Ή | VARCHAR(20) | 10λ, 20λ,30λ,.. |
| κ±°μ£Όμλλͺ | VARCHAR(20) | μμΈ,λΆμ°,.. |
| μμ€νμ_μΌμλΆ_B0M | INT | 100,220 ,123,321... |
| μ°μ²΄μμ‘_B0M | INT | 100,000 , 200,100... |
| μ°μ²΄μμ‘_μΌμλΆ_B0M | INT | 123,321... |
| μ°μ²΄μμ‘_ν λΆ | INT | 0, 133,122... |
- νν°μ κ°μ 5κ°λ‘ λΆν (λ¨μΌ νν°μ λ 5κ°, λ³΅ν© νν°μ λ 25κ°)
- νν°μ ν€ : λ°κΈνμλ²νΈ, μ°μ²΄μ°λ
SELECT
TABLE_NAME, PARTITION_NAME, SUBPARTITION_NAME, PARTITION_METHOD, SUBPARTITION_METHOD, TABLE_ROWS
FROM
information_schema.PARTITIONS
WHERE TABLE_NAME='ν
μ΄λΈλͺ
';
3. μλ ν μ΄λΈμ μ΅μ’ ν μ΄λΈ μ μ ν λλ‘ νν°μ λμ μ μ©ν ν μ΄λΈμ λλ€.
1. LIST νν°μ λ
1-1. LIST νν°μ λ
CREATE TABLE list (
λ°κΈνμλ²νΈ INT,
λ¨λ
ꡬλΆμ½λ INT,
μ°λ Ή VARCHAR(20),
κ±°μ£Όμλλͺ
VARCHAR(20),
μμ€νμ_μΌμλΆ_B0M INT,
μ°μ²΄μΌμ_B0M DATE,
μ°μ²΄μ°λ INT,
μ°μ²΄μμ‘_B0M INT,
μ°μ²΄μμ‘_μΌμλΆ_B0M INT,
μ°μ²΄μμ‘_ν λΆ_B0M INT,
primary key(λ°κΈνμλ²νΈ, μ°μ²΄μ°λ)
) PARTITION BY LIST (μ°μ²΄μ°λ)(
PARTITION P2005 VALUES IN (2000,2001, 2002, 2003, 2004),
PARTITION P2010 VALUES IN (2005, 2006, 2007, 2008, 2009),
PARTITION P2015 VALUES IN (2010, 2011, 2012, 2013, 2014),
PARTITION P2020 VALUES IN (2015, 2016, 2017, 2018, 2019),
PARTITION P2025 VALUES IN (2020, 2021, 2022, 2023, 2024, 2025)
);
1-2. LIST-HASH νν°μ λ
CREATE TABLE list_hash (
λ°κΈνμλ²νΈ INT,
λ¨λ
ꡬλΆμ½λ INT,
μ°λ Ή VARCHAR(20),
κ±°μ£Όμλλͺ
VARCHAR(20),
μμ€νμ_μΌμλΆ_B0M INT,
μ°μ²΄μΌμ_B0M DATE,
μ°μ²΄μ°λ INT,
μ°μ²΄μμ‘_B0M INT,
μ°μ²΄μμ‘_μΌμλΆ_B0M INT,
μ°μ²΄μμ‘_ν λΆ_B0M INT,
primary key(λ°κΈνμλ²νΈ, μ°μ²΄μ°λ)
) PARTITION BY list (μ°μ²΄μ°λ)
SUBPARTITION BY hash(λ°κΈνμλ²νΈ)
SUBPARTITIONS 5(
PARTITION P2005 VALUES IN (2000,2001, 2002, 2003, 2004),
PARTITION P2010 VALUES IN (2005, 2006, 2007, 2008, 2009),
PARTITION P2015 VALUES IN (2010, 2011, 2012, 2013, 2014),
PARTITION P2020 VALUES IN (2015, 2016, 2017, 2018, 2019),
PARTITION P2025 VALUES IN (2020, 2021, 2022, 2023, 2024, 2025)
);
1-3. LIST-KEY νν°μ
λ
CREATE TABLE list_key (
λ°κΈνμλ²νΈ INT,
λ¨λ
ꡬλΆμ½λ INT,
μ°λ Ή VARCHAR(20),
κ±°μ£Όμλλͺ
VARCHAR(20),
μμ€νμ_μΌμλΆ_B0M INT,
μ°μ²΄μΌμ_B0M DATE,
μ°μ²΄μ°λ INT,
μ°μ²΄μμ‘_B0M INT,
μ°μ²΄μμ‘_μΌμλΆ_B0M INT,
μ°μ²΄μμ‘_ν λΆ_B0M INT,
primary key(λ°κΈνμλ²νΈ, μ°μ²΄μ°λ)
) PARTITION BY list (μ°μ²΄μ°λ)
SUBPARTITION BY key(λ°κΈνμλ²νΈ)
SUBPARTITIONS 5(
PARTITION P2005 VALUES IN (2000,2001, 2002, 2003, 2004),
PARTITION P2010 VALUES IN (2005, 2006, 2007, 2008, 2009),
PARTITION P2015 VALUES IN (2010, 2011, 2012, 2013, 2014),
PARTITION P2020 VALUES IN (2015, 2016, 2017, 2018, 2019),
PARTITION P2025 VALUES IN (2020, 2021, 2022, 2023, 2024, 2025)
);
2. RANGE νν°μ λ
2-1. RANGE νν°μ λ
CREATE TABLE p_range (
λ°κΈνμλ²νΈ INT,
λ¨λ
ꡬλΆμ½λ INT,
μ°λ Ή VARCHAR(20),
κ±°μ£Όμλλͺ
VARCHAR(20),
μμ€νμ_μΌμλΆ_B0M INT,
μ°μ²΄μΌμ_B0M DATE,
μ°μ²΄μ°λ INT,
μ°μ²΄μμ‘_B0M INT,
μ°μ²΄μμ‘_μΌμλΆ_B0M INT,
μ°μ²΄μμ‘_ν λΆ_B0M INT,
primary key(λ°κΈνμλ²νΈ, μ°μ²΄μ°λ)
) PARTITION BY range (μ°μ²΄μ°λ)(
PARTITION P2005 VALUES LESS THAN (2005),
PARTITION P2010 VALUES LESS THAN (2010),
PARTITION P2015 VALUES LESS THAN (2015),
PARTITION P2020 VALUES LESS THAN (2020),
PARTITION P2025 VALUES LESS THAN MAXVALUE
);
2-2. RANGE-HASH νν°μ λ
CREATE TABLE range_hash (
λ°κΈνμλ²νΈ INT,
λ¨λ
ꡬλΆμ½λ INT,
μ°λ Ή VARCHAR(20),
κ±°μ£Όμλλͺ
VARCHAR(20),
μμ€νμ_μΌμλΆ_B0M INT,
μ°μ²΄μΌμ_B0M DATE,
μ°μ²΄μ°λ INT,
μ°μ²΄μμ‘_B0M INT,
μ°μ²΄μμ‘_μΌμλΆ_B0M INT,
μ°μ²΄μμ‘_ν λΆ_B0M INT,
primary key(λ°κΈνμλ²νΈ, μ°μ²΄μ°λ)
) PARTITION BY range (μ°μ²΄μ°λ)
SUBPARTITION BY HASH(λ°κΈνμλ²νΈ)
SUBPARTITIONS 5(
PARTITION P2005 VALUES LESS THAN (2005),
PARTITION P2010 VALUES LESS THAN (2010),
PARTITION P2015 VALUES LESS THAN (2015),
PARTITION P2020 VALUES LESS THAN (2020),
PARTITION P2025 VALUES LESS THAN MAXVALUE
);
2-3. RANGE-KEY νν°μ
λ
CREATE TABLE range_key (
λ°κΈνμλ²νΈ INT,
λ¨λ
ꡬλΆμ½λ INT,
μ°λ Ή VARCHAR(20),
κ±°μ£Όμλλͺ
VARCHAR(20),
μμ€νμ_μΌμλΆ_B0M INT,
μ°μ²΄μΌμ_B0M DATE,
μ°μ²΄μ°λ INT,
μ°μ²΄μμ‘_B0M INT,
μ°μ²΄μμ‘_μΌμλΆ_B0M INT,
μ°μ²΄μμ‘_ν λΆ_B0M INT,
primary key(λ°κΈνμλ²νΈ, μ°μ²΄μ°λ)
) PARTITION BY range (μ°μ²΄μ°λ)
SUBPARTITION BY key(λ°κΈνμλ²νΈ)
SUBPARTITIONS 5(
PARTITION P2005 VALUES LESS THAN (2005),
PARTITION P2010 VALUES LESS THAN (2010),
PARTITION P2015 VALUES LESS THAN (2015),
PARTITION P2020 VALUES LESS THAN (2020),
PARTITION P2025 VALUES LESS THAN MAXVALUE
);
3. HASH νν°μ λ
CREATE TABLE hash (
λ°κΈνμλ²νΈ INT,
λ¨λ
ꡬλΆμ½λ INT,
μ°λ Ή VARCHAR(20),
κ±°μ£Όμλλͺ
VARCHAR(20),
μμ€νμ_μΌμλΆ_B0M INT,
μ°μ²΄μΌμ_B0M DATE,
μ°μ²΄μ°λ INT,
μ°μ²΄μμ‘_B0M INT,
μ°μ²΄μμ‘_μΌμλΆ_B0M INT,
μ°μ²΄μμ‘_ν λΆ_B0M INT,
primary key(λ°κΈνμλ²νΈ, μ°μ²΄μ°λ)
) PARTITION BY hash (μ°μ²΄μ°λ)
PARTITIONS 5;
4. KEY νν°μ λ
CREATE TABLE p_key (
λ°κΈνμλ²νΈ INT,
λ¨λ
ꡬλΆμ½λ INT,
μ°λ Ή VARCHAR(20),
κ±°μ£Όμλλͺ
VARCHAR(20),
μμ€νμ_μΌμλΆ_B0M INT,
μ°μ²΄μΌμ_B0M DATE,
μ°μ²΄μ°λ INT,
μ°μ²΄μμ‘_B0M INT,
μ°μ²΄μμ‘_μΌμλΆ_B0M INT,
μ°μ²΄μμ‘_ν λΆ_B0M INT,
primary key(λ°κΈνμλ²νΈ, μ°μ²΄μ°λ)
) PARTITION BY key (μ°μ²΄μ°λ)
PARTITIONS 5;
PROCEDUREλ₯Ό μ΄μ©νμ¬ νν°μ
λ ν
μ΄λΈ λ³ 500λ²μ© μ°μ²΄μ°λ = 2000 and λ°κΈνμλ²νΈ=9945 쑰건μ μ‘°νν©λλ€.
- μ»΄ν¨ν° νλ‘κ·Έλλ°μμ νΉμ μμ μ μννκΈ° μν΄ μΌλ ¨μ λͺ λ Ήμ΄λ€μ λͺ¨μλμ κ²
- μ΄λ¬ν λͺ λ Ήμ΄ μ§ν©μ νλμ λ¨μλ‘μ μλνλ©°, λ°λ³΅μ μΌλ‘ μνλμ΄μΌ νλ μμ λ€μ ν¨μ¨μ μΌλ‘ μ²λ¦¬ν μ μκ² ν΄μ€λ€
-- ν
μ€νΈ νλ‘μμ Έ
CREATE PROCEDURE test()
BEGIN
DECLARE i INT DEFAULT 0;
WHILE i < 500 DO
SELECT * FROM ν
μ΄λΈλͺ
IGNORE INDEX (PRIMARY) WHERE μ°μ²΄μ°λ=2000 and λ°κΈνμλ²νΈ=9945;
SET i = i + 1;
END WHILE;
END;
-- νλ‘μμ Έ νΈμΆ
CALL test();
| νν°μ λ λ°©μ | νκ· μ€ν μκ° (s) | λ¨μΌ ν μ΄λΈ λλΉ μ±λ₯ ν₯μλ₯ (%) |
|---|---|---|
| νν°μ λ λ―Έμ μ© | 18s | - |
| LIST | 4.195s | β² 76.7% |
| LIST-HASH | 1.01s | β² 94.4% |
| LIST-KEY | 1.001s | β² 94.4% |
| RANGE | 4.125s | β² 77.1% |
| RANGE-HASH | 0.98s | β² 94.6% |
| RANGE-KEY | 1.032s | β² 94.3% |
| HASH | 4.531s | β² 74.8% |
| KEY | 4.982s | β² 72.3% |
νν°μ λ λ°©μλ³ ν μ€νΈ μΆλ ₯νλ©΄
1. λ¨μΌν μ΄λΈ μ±λ₯2. LIST νν°μ λ
3. LIST-HASH νν°μ λ
4. LIST-KEY νν°μ λ
5. RANGE νν°μ λ
6. RANGE-HASH νν°μ λ
7. RANGE-KEY νν°μ λ
8. HASH νν°μ λ
9. KEY νν°μ λ
- λ¨μΌ νν°μ λ μ κ²½μ° : μ½ 75% ν₯μ
- λ³΅ν© νν°μ λ μ κ²½μ° : μ½ 94% ν₯μ
- λ³΅ν© νν°μ λμ λ¨μΌ νν°μ λλ³΄λ€ μ½ 77% ν₯μ
- λ¨μΌ νν°μ λ μ κ²½μ° : RANGE
- λ³΅ν© νν°μ λ μ κ²½μ° : RANGE-HASH
- κ³ λ €μ¬ν : νν°μ λ λ°©μμ λ°λ₯Έ μμ΄ν λ°μ΄ν° νμ , λ°©λν λ°μ΄ν° λ° νν°μ κ°μ
- 8κ°μ λ°©μ μ€ μ μΌνκ² λ°μ΄ν°κ° κ· λ±νκ² λΆν λμ§ μμμ΅λλ€.
KEYλ MySQL λ΄λΆμ λΉκ³΅κ° ν΄μ μκ³ λ¦¬μ¦μ μ¬μ©νμ¬, λΆμ° λ°©μμ μμΈ‘μ΄ λΆκ° νλ©° λ°μ΄ν°κ° νΈμ€λ μ μλ€.
- KEY νν°μ λμ λ°μ΄ν° νΉμ± λ° λΆν¬μ λ―Όκ°νλ―λ‘ μ€λ¬΄ μ μ© μ μ£Όμ νμ
- λ°μ΄ν° μκ³Ό νν°μ κ°μμ λ°λ₯Έ λΆμ νμ
- νλ‘μ νΈ μ΄λ° μμ΄λμ΄λ₯Ό λμΆνκ³ μ 리νλ κ³Όμ μμ,λμΌν μ£Όμ λ₯Ό λ°λΌλ³΄λ κ΄μ κ³Ό ν΄μμ΄ κ΅¬μ±μλ§λ€ μμ΄
- ν΄κ²° λ°©λ²
- μλ‘κ° μκ°νλ νλ‘μ νΈμ λ°©ν₯μ±κ³Ό ν΅μ¬ λͺ©νμ λν΄ κ΅¬μ²΄μ μΌλ‘ λννλ μκ°μ λ§λ ¨νμκ³ ,
μ΄λ₯Ό ν΅ν΄ κ°μμ κ΄μ κ³Ό ν΄μ μ°¨μ΄ μ΄ν΄
β ν΄κ²° μλ£
- μλ‘κ° μκ°νλ νλ‘μ νΈμ λ°©ν₯μ±κ³Ό ν΅μ¬ λͺ©νμ λν΄ κ΅¬μ²΄μ μΌλ‘ λννλ μκ°μ λ§λ ¨νμκ³ ,
.csvνμΌμUTF-8λ‘ μ μ₯νμμλ μ λ‘λ μ νκΈ κΉ¨μ§ νμ λ°μνμ΅λλ€.- ν΄κ²° λ°©λ²
- μ
λ‘λ μ
SET NAMES utf8mb4λ‘ λ¬Έμμ λκΈ°ν μ²λ¦¬
β λ¬Έμ ν΄κ²° μλ£
- μ
λ‘λ μ
-
λͺ©ν
μ±λ³κΈ°μ€μΌλ‘ 리μ€νΈ λΆν ν,μ°μ²΄μκΈ_μ΅κ·ΌκΈ°μ€ λ²μλ‘ μλΈ νν°μ λ -
μλν μ½λ
CREATE TABLE temp_data ( λ°κΈνμλ²νΈ VARCHAR(20), μ±λ³ CHAR(1), μ°μ²΄μκΈ_μ΅κ·Ό INT ) PARTITION BY LIST (μ±λ³) SUBPARTITION BY RANGE (μ°μ²΄μκΈ_μ΅κ·Ό) ( PARTITION p_male VALUES IN ('M') SUBPARTITIONS 3 ( SUBPARTITION sp_male_low VALUES LESS THAN (100000), SUBPARTITION sp_male_mid VALUES LESS THAN (500000), SUBPARTITION sp_male_high VALUES LESS THAN MAXVALUE ), PARTITION p_female VALUES IN ('F') SUBPARTITIONS 3 ( SUBPARTITION sp_female_low VALUES LESS THAN (100000), SUBPARTITION sp_female_mid VALUES LESS THAN (500000), SUBPARTITION sp_female_high VALUES LESS THAN MAXVALUE ) );
-
κ²°κ³Ό
β MySQLμμLIST + RANGEμ‘°ν©μ μ§μ μ μΈ μλΈ νν°μ λμΌλ‘ μ§μλμ§ μμμ΅λλ€.
-
λͺ©ν
λ€μ°¨μ κΈ°μ€ (μ°μ²΄μΌμ, μ 보μμ΄λ, κΈμ‘)μ λͺ¨λ λ°μνκΈ° μν΄
RANGE β HASH β LISTꡬ쑰μ 3λ¨κ³ νν°μ λ μλ -
κ²°κ³Ό
β μλΈ νν°μ λμΌλ‘ 3μ°¨λ MySQLμμ νμ©λμ§ μμμ΅λλ€.
π’ κ²°λ‘
MYSQL κΈ°μ€ 2λ¨κ³ νν°μ
λκΉμ§ μ§μνλ©°, λ©μΈ νν°μ
λμ RANGEμ LIST μλΈ νν°μ
λμ HASHμ KEY μ¬μ© κ°λ₯
- μ΄μ
explain analyze select * from range_hash
where μ°μ²΄μ°λ=2000 and λ°κΈνμλ²νΈ=9945;
rowμ μκ° μλΈνν°μ
μ row(μ½ 4000κ°)λ‘ μΆλ ₯λμ§ μλ μ΄μ λ°μ
- ν΄κ²° λ°©λ²
explain analyze select * from range_hash
IGNORE INDEX (PRIMARY)
where μ°μ²΄μ°λ=2000 and λ°κΈνμλ²νΈ=9945;νν°μ λ κΈ°λ²λ§μΌλ‘ μ±λ₯ λΉκ΅λ₯Ό μν΄ PK μΈλ±μ€ νμμ λ°°μ νμ΅λλ€.