Created
February 14, 2013 20:55
-
-
Save ms-tg/4956336 to your computer and use it in GitHub Desktop.
The code presented in 2009 blog post: http://explainextended.com/2009/08/18/passing-parameters-in-mysql-in-list-vs-temporary-table/
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
CREATE TABLE filler ( | |
id INT NOT NULL PRIMARY KEY AUTO_INCREMENT | |
) ENGINE=Memory; | |
CREATE TABLE t_param ( | |
param INT NOT NULL PRIMARY KEY | |
) ENGINE=Memory; | |
CREATE TABLE t_source ( | |
id INT NOT NULL PRIMARY KEY, | |
data VARCHAR(100) NOT NULL | |
) ENGINE=InnoDB DEFAULT CHARSET=UTF8; | |
DELIMITER $$ | |
CREATE PROCEDURE prc_filler(cnt INT) | |
BEGIN | |
DECLARE _cnt INT; | |
SET _cnt = 1; | |
WHILE _cnt <= cnt DO | |
INSERT | |
INTO filler | |
SELECT _cnt; | |
SET _cnt = _cnt + 1; | |
END WHILE; | |
END | |
$$ | |
CREATE PROCEDURE prc_temporary(cnt INT) | |
BEGIN | |
DECLARE _cnt INT; | |
DECLARE _out INT; | |
SET _cnt = 1; | |
WHILE _cnt <= cnt DO | |
TRUNCATE TABLE t_param; | |
PREPARE STMT FROM | |
' | |
INSERT | |
INTO t_param (param) | |
VALUES (50000), (49900), (49800), (49700), (49600), (49500), (49400), (49300), (49200), (49100), (49000), (48900), (48800), (48700), (48600), (48500), (48400), (48300), (48200), (48100), (48000), (47900), (47800), (47700), (47600), (47500), (47400), (47300), (47200), (47100), (47000), (46900), (46800), (46700), (46600), (46500), (46400), (46300), (46200), (46100), (46000), (45900), (45800), (45700), (45600), (45500), (45400), (45300), (45200), (45100), (45000), (44900), (44800), (44700), (44600), (44500), (44400), (44300), (44200), (44100), (44000), (43900), (43800), (43700), (43600), (43500), (43400), (43300), (43200), (43100), (43000), (42900), (42800), (42700), (42600), (42500), (42400), (42300), (42200), (42100), (42000), (41900), (41800), (41700), (41600), (41500), (41400), (41300), (41200), (41100), (41000), (40900), (40800), (40700), (40600), (40500), (40400), (40300), (40200), (40100), (40000), (39900), (39800), (39700), (39600), (39500), (39400), (39300), (39200), (39100), (39000), (38900), (38800), (38700), (38600), (38500), (38400), (38300), (38200), (38100), (38000), (37900), (37800), (37700), (37600), (37500), (37400), (37300), (37200), (37100), (37000), (36900), (36800), (36700), (36600), (36500), (36400), (36300), (36200), (36100), (36000), (35900), (35800), (35700), (35600), (35500), (35400), (35300), (35200), (35100), (35000), (34900), (34800), (34700), (34600), (34500), (34400), (34300), (34200), (34100), (34000), (33900), (33800), (33700), (33600), (33500), (33400), (33300), (33200), (33100), (33000), (32900), (32800), (32700), (32600), (32500), (32400), (32300), (32200), (32100), (32000), (31900), (31800), (31700), (31600), (31500), (31400), (31300), (31200), (31100), (31000), (30900), (30800), (30700), (30600), (30500), (30400), (30300), (30200), (30100), (30000), (29900), (29800), (29700), (29600), (29500), (29400), (29300), (29200), (29100), (29000), (28900), (28800), (28700), (28600), (28500), (28400), (28300), (28200), (28100), (28000), (27900), (27800), (27700), (27600), (27500), (27400), (27300), (27200), (27100), (27000), (26900), (26800), (26700), (26600), (26500), (26400), (26300), (26200), (26100), (26000), (25900), (25800), (25700), (25600), (25500), (25400), (25300), (25200), (25100), (25000), (24900), (24800), (24700), (24600), (24500), (24400), (24300), (24200), (24100), (24000), (23900), (23800), (23700), (23600), (23500), (23400), (23300), (23200), (23100), (23000), (22900), (22800), (22700), (22600), (22500), (22400), (22300), (22200), (22100), (22000), (21900), (21800), (21700), (21600), (21500), (21400), (21300), (21200), (21100), (21000), (20900), (20800), (20700), (20600), (20500), (20400), (20300), (20200), (20100), (20000), (19900), (19800), (19700), (19600), (19500), (19400), (19300), (19200), (19100), (19000), (18900), (18800), (18700), (18600), (18500), (18400), (18300), (18200), (18100), (18000), (17900), (17800), (17700), (17600), (17500), (17400), (17300), (17200), (17100), (17000), (16900), (16800), (16700), (16600), (16500), (16400), (16300), (16200), (16100), (16000), (15900), (15800), (15700), (15600), (15500), (15400), (15300), (15200), (15100), (15000), (14900), (14800), (14700), (14600), (14500), (14400), (14300), (14200), (14100), (14000), (13900), (13800), (13700), (13600), (13500), (13400), (13300), (13200), (13100), (13000), (12900), (12800), (12700), (12600), (12500), (12400), (12300), (12200), (12100), (12000), (11900), (11800), (11700), (11600), (11500), (11400), (11300), (11200), (11100), (11000), (10900), (10800), (10700), (10600), (10500), (10400), (10300), (10200), (10100), (10000), (9900), (9800), (9700), (9600), (9500), (9400), (9300), (9200), (9100), (9000), (8900), (8800), (8700), (8600), (8500), (8400), (8300), (8200), (8100), (8000), (7900), (7800), (7700), (7600), (7500), (7400), (7300), (7200), (7100), (7000), (6900), (6800), (6700), (6600), (6500), (6400), (6300), (6200), (6100), (6000), (5900), (5800), (5700), (5600), (5500), (5400), (5300), (5200), (5100), (5000), (4900), (4800), (4700), (4600), (4500), (4400), (4300), (4200), (4100), (4000), (3900), (3800), (3700), (3600), (3500), (3400), (3300), (3200), (3100), (3000), (2900), (2800), (2700), (2600), (2500), (2400), (2300), (2200), (2100), (2000), (1900), (1800), (1700), (1600), (1500), (1400), (1300), (1200), (1100), (1000), (900), (800), (700), (600), (500), (400), (300), (200), (100) | |
'; | |
EXECUTE STMT; | |
SELECT SUM(id) | |
INTO _out | |
FROM t_param p | |
JOIN t_source s | |
ON s.id = p.param; | |
DEALLOCATE PREPARE STMT; | |
SET _cnt = _cnt + 1; | |
END WHILE; | |
SELECT _cnt; | |
END; | |
$$ | |
CREATE PROCEDURE prc_list(cnt INT) | |
BEGIN | |
DECLARE _cnt INT; | |
DECLARE _out INT; | |
SET _cnt = 1; | |
WHILE _cnt <= cnt DO | |
PREPARE STMT FROM | |
' | |
SELECT SUM(id) | |
INTO @out | |
FROM t_source | |
WHERE id IN (50000, 49900, 49800, 49700, 49600, 49500, 49400, 49300, 49200, 49100, 49000, 48900, 48800, 48700, 48600, 48500, 48400, 48300, 48200, 48100, 48000, 47900, 47800, 47700, 47600, 47500, 47400, 47300, 47200, 47100, 47000, 46900, 46800, 46700, 46600, 46500, 46400, 46300, 46200, 46100, 46000, 45900, 45800, 45700, 45600, 45500, 45400, 45300, 45200, 45100, 45000, 44900, 44800, 44700, 44600, 44500, 44400, 44300, 44200, 44100, 44000, 43900, 43800, 43700, 43600, 43500, 43400, 43300, 43200, 43100, 43000, 42900, 42800, 42700, 42600, 42500, 42400, 42300, 42200, 42100, 42000, 41900, 41800, 41700, 41600, 41500, 41400, 41300, 41200, 41100, 41000, 40900, 40800, 40700, 40600, 40500, 40400, 40300, 40200, 40100, 40000, 39900, 39800, 39700, 39600, 39500, 39400, 39300, 39200, 39100, 39000, 38900, 38800, 38700, 38600, 38500, 38400, 38300, 38200, 38100, 38000, 37900, 37800, 37700, 37600, 37500, 37400, 37300, 37200, 37100, 37000, 36900, 36800, 36700, 36600, 36500, 36400, 36300, 36200, 36100, 36000, 35900, 35800, 35700, 35600, 35500, 35400, 35300, 35200, 35100, 35000, 34900, 34800, 34700, 34600, 34500, 34400, 34300, 34200, 34100, 34000, 33900, 33800, 33700, 33600, 33500, 33400, 33300, 33200, 33100, 33000, 32900, 32800, 32700, 32600, 32500, 32400, 32300, 32200, 32100, 32000, 31900, 31800, 31700, 31600, 31500, 31400, 31300, 31200, 31100, 31000, 30900, 30800, 30700, 30600, 30500, 30400, 30300, 30200, 30100, 30000, 29900, 29800, 29700, 29600, 29500, 29400, 29300, 29200, 29100, 29000, 28900, 28800, 28700, 28600, 28500, 28400, 28300, 28200, 28100, 28000, 27900, 27800, 27700, 27600, 27500, 27400, 27300, 27200, 27100, 27000, 26900, 26800, 26700, 26600, 26500, 26400, 26300, 26200, 26100, 26000, 25900, 25800, 25700, 25600, 25500, 25400, 25300, 25200, 25100, 25000, 24900, 24800, 24700, 24600, 24500, 24400, 24300, 24200, 24100, 24000, 23900, 23800, 23700, 23600, 23500, 23400, 23300, 23200, 23100, 23000, 22900, 22800, 22700, 22600, 22500, 22400, 22300, 22200, 22100, 22000, 21900, 21800, 21700, 21600, 21500, 21400, 21300, 21200, 21100, 21000, 20900, 20800, 20700, 20600, 20500, 20400, 20300, 20200, 20100, 20000, 19900, 19800, 19700, 19600, 19500, 19400, 19300, 19200, 19100, 19000, 18900, 18800, 18700, 18600, 18500, 18400, 18300, 18200, 18100, 18000, 17900, 17800, 17700, 17600, 17500, 17400, 17300, 17200, 17100, 17000, 16900, 16800, 16700, 16600, 16500, 16400, 16300, 16200, 16100, 16000, 15900, 15800, 15700, 15600, 15500, 15400, 15300, 15200, 15100, 15000, 14900, 14800, 14700, 14600, 14500, 14400, 14300, 14200, 14100, 14000, 13900, 13800, 13700, 13600, 13500, 13400, 13300, 13200, 13100, 13000, 12900, 12800, 12700, 12600, 12500, 12400, 12300, 12200, 12100, 12000, 11900, 11800, 11700, 11600, 11500, 11400, 11300, 11200, 11100, 11000, 10900, 10800, 10700, 10600, 10500, 10400, 10300, 10200, 10100, 10000, 9900, 9800, 9700, 9600, 9500, 9400, 9300, 9200, 9100, 9000, 8900, 8800, 8700, 8600, 8500, 8400, 8300, 8200, 8100, 8000, 7900, 7800, 7700, 7600, 7500, 7400, 7300, 7200, 7100, 7000, 6900, 6800, 6700, 6600, 6500, 6400, 6300, 6200, 6100, 6000, 5900, 5800, 5700, 5600, 5500, 5400, 5300, 5200, 5100, 5000, 4900, 4800, 4700, 4600, 4500, 4400, 4300, 4200, 4100, 4000, 3900, 3800, 3700, 3600, 3500, 3400, 3300, 3200, 3100, 3000, 2900, 2800, 2700, 2600, 2500, 2400, 2300, 2200, 2100, 2000, 1900, 1800, 1700, 1600, 1500, 1400, 1300, 1200, 1100, 1000, 900, 800, 700, 600, 500, 400, 300, 200, 100) | |
'; | |
EXECUTE STMT; | |
DEALLOCATE PREPARE STMT; | |
SET _cnt = _cnt + 1; | |
END WHILE; | |
SELECT _cnt; | |
END; | |
$$ | |
DELIMITER ; | |
START TRANSACTION; | |
CALL prc_filler(50000); | |
COMMIT; | |
INSERT | |
INTO t_source | |
SELECT id, CONCAT('Value ', id) | |
FROM filler; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment