char varchar en tabel random vullen

on

Char or varchar2 that’s the question. Men zegt dat char sneller is dan varchar2. Maar dat klopt niet, want char is een subtype van varchar2 waarbij rechts wordt aangevuld met spaties.

Daarom maar een klein vingeroefingetje gedaan, waarbij ik een tabel maak met 2 kolommen (een char(30) en een varchar2(30) en deze tabel vervolgens vul met 1 miljoen random waarden, variƫrend van lengte 1 tot lengte 30. Vervolgens doe ik een querie met een zoekwaarde op de ene en vervolgens op de andere kolom. En hou de stopwatch in mijn hand. (Bij wijze van spreken, ik kijk naar de doorlooptijd in Toad).

CREATE TABLE char_test(ch CHAR(30), vc VARCHAR2(30));

TRUNCATE TABLE char_test;

DECLARE
  l_val VARCHAR2(30);
BEGIN
  FOR i IN 1..1000000
  LOOP
    l_val:= DBMS_RANDOM.STRING('A', ROUND(DBMS_RANDOM.VALUE(1,30)));
    INSERT INTO char_test
    VALUES (l_val,l_val);
  END LOOP;
END;

Daarna de volgende queries gedraaid:
SELECT * FROM char_test WHERE ch=’gHtGuiEMonFeiihbvAxdtkD’;
duurde 163 ms

SELECT * FROM char_test WHERE vc=’gHtGuiEMonFeiihbvAxdtkD’;
duurde 84 ms

Lijkt erop dat de varchar2 query toch echt wel 2 keer zo snel is.