3. JWC13 - Eli Aschkenasy - Nested Sets & DB Design Principles
Eli Aschkenasy
I LOVE
DATA!
4. JWC13 - Eli Aschkenasy - Nested Sets & DB Design Principles
Eli Aschkenasy
Lived in 7 countries
Live for Skiing/Kayaking
Love! Data
Like Joomla!
DATA
I LOVE
DATA!
5. JWC13 - Eli Aschkenasy - Nested Sets & DB Design Principles
Eli Aschkenasy
I LOVE
JOOMLA!
6. JWC13 - Eli Aschkenasy - Nested Sets & DB Design Principles
Eli Aschkenasy
Lived in 7 countries
Live for Skiing/Kayaking
Like Data
Love Joomla!
JOOMLA
7. • WHO AM I ?
•
•
•
•
•
•
JWC13 - Eli Aschkenasy - Nested Sets & DB Design Principles
8. JWC13 - Eli Aschkenasy - Nested Sets & DB Design Principles
9. JWC13 - Eli Aschkenasy - Nested Sets & DB Design Principles
10. JWC13 - Eli Aschkenasy - Nested Sets & DB Design Principles
11. JWC13 - Eli Aschkenasy - Nested Sets & DB Design Principles
33. • WHO AM I ?
• NESTED SET INTRO
• NESTED SET BASIC QUERIES
• NESTED SET BASIC QUERIES OPTIMIZATION
•
•
•
JWC13 - Eli Aschkenasy - Nested Sets & DB Design Principles
34. JWC13 - Eli Aschkenasy - Nested Sets & DB Design Principles
35. JWC13 - Eli Aschkenasy - Nested Sets & DB Design Principles
Common INSERT
INSERT INTO #__ (part_number, unit_price,
eau,….)
VALUES (….);
Common SELECT
SELECT unit_price FROM #__
WHERE part_number = $part_number;
36. JWC13 - Eli Aschkenasy - Nested Sets & DB Design Principles
Common INSERT
INSERT INTO #__ (part_number, unit_price,
eau,….)
VALUES (….);
Common SELECT
SELECT unit_price FROM #__
WHERE part_number = $part_number;
PROBLEMS:
1. Speed
2. Data accuracy (inconsistent white spacing)
37. JWC13 - Eli Aschkenasy - Nested Sets & DB Design Principles
Amended INSERT
php: $concat = preg_replace('/s+/', '', $input);
INSERT INTO #__ (part_number, unit_price,
eau,part_number_concat,…)
VALUES (…,$concat);
Amended SELECT
SELECT unit_price FROM #__
WHERE part_number_concat = $concat;
PROBLEMS:
1. Speed
2. Data accuracy (inconsistent white spacing)
38. JWC13 - Eli Aschkenasy - Nested Sets & DB Design Principles
Optimized INSERT
php: $concat = preg_replace('/s+/', '', $input);
php: $crc = crc32($concat);
INSERT INTO #__ (part_number, unit_price,
eau,part_number_concat,crc_partnumberconcat…)
VALUES (…,$concat,$crc);
Optimized SELECT
SELECT unit_price FROM #__
WHERE crc_partnumberconcat = $crc
AND part_number_concat = $concat; (singularity)
PROBLEMS:
1. Speed
2. Data accuracy (inconsistent white spacing)
39. JWC13 - Eli Aschkenasy - Nested Sets & DB Design Principles
Optimized INSERT (* BATCH)
php: $concat = preg_replace('/s+/', '', $input);
php: $crc = crc32($concat);
ALTER TABLE #__ DROP INDEX x
INSERT INTO #__ (part_number, unit_price,
eau,part_number_concat,crc_partnumberconcat…)
VALUES (…,$concat,$crc);
ALTER TABLE #__ ADD INDEX x (‘column’)
Optimized SELECT
SELECT unit_price FROM #__
WHERE crc_partnumberconcat = $crc
AND part_number_concat = $concat;
PROBLEMS:
1. Speed
2. Data accuracy (inconsistent white spacing)
40. JWC13 - Eli Aschkenasy - Nested Sets & DB Design Principles
Indexing Options
ALWAYS BENCHMARK (against COLD DB)
41. JWC13 - Eli Aschkenasy - Nested Sets & DB Design Principles
Indexing Options
ALWAYS BENCHMARK (against COLD DB)
USE EXPLAIN (EXTENSIVELY!!!)
Assumption:
I might search part_number_concat directly:
idx_pnc_crc (part_number_concat, crc_partnumberconcat)
Alternative:
idx_crc_pnc (crc_partnumberconcat, part_number_concat)
idx_pnc (part_number_concat)
42. • WHO AM I ?
• NESTED SET INTRO
• NESTED SET BASIC QUERIES
• NESTED SET BASIC QUERIES OPTIMIZATION
• STRING LOOKUP OPTIMIZATION TRICK
• INDEXING OPTIONS
•
JWC13 - Eli Aschkenasy - Nested Sets & DB Design Principles