Changes between Version 5 and Version 6 of Phase1_Partitioning


Ignore:
Timestamp:
12/10/25 02:36:29 (3 weeks ago)
Author:
226052
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • Phase1_Partitioning

    v5 v6  
    180180
    181181
    182 Извршување на прашалник на новата табела со партиции
     182Извршување на прашалник на новата табела со партиции.
    183183
    184184{{{
     
    194194PostgreSQL го корсити механизмот partition pruning така што наместо да ги скенира сите 60 партиции, ги скенира само они кои го опфаќаат периодот помеѓу '''2022-01-01''' и '''2022-08-01''', тоа се партициите '''payment_2022_01''' до '''payment_2022_07'''.
    195195
    196 
    197 
    198 
    199 
    200 
     196=== Партицинориање на customer табелата
     197
     198{{{ ALTER TABLE customer RENAME TO customer_old; }}}
     199
     200{{{
     201CREATE TABLE customer (
     202    customer_id BIGINT GENERATED ALWAYS AS IDENTITY,
     203    store_id INT NOT NULL,
     204    first_name TEXT NOT NULL,
     205    last_name TEXT NOT NULL,
     206    email TEXT,
     207    address_id BIGINT NOT NULL,
     208    PRIMARY KEY (customer_id, store_id)
     209)
     210PARTITION BY LIST (store_id);
     211}}}
     212
     213Сега ќе направиме партиционирање со List partitioning.
     214{{{
     215CREATE TABLE customer_store_1 PARTITION OF customer FOR VALUES IN (1);
     216CREATE TABLE customer_store_2 PARTITION OF customer FOR VALUES IN (2);
     217CREATE TABLE customer_store_3 PARTITION OF customer FOR VALUES IN (3);
     218CREATE TABLE customer_store_4 PARTITION OF customer FOR VALUES IN (4);
     219CREATE TABLE customer_store_5 PARTITION OF customer FOR VALUES IN (5);
     220}}}
     221
     222{{{
     223INSERT INTO customer (store_id, first_name, last_name, email, address_id)
     224SELECT store_id, first_name, last_name, email, address_id
     225FROM customer_old;
     226}}}
     227
     228{{{
     229ALTER TABLE customer ADD FOREIGN KEY (address_id) REFERENCES address(address_id);
     230ALTER TABLE customer ADD FOREIGN KEY (store_id) REFERENCES store(store_id);
     231}}}
     232
     233Извршување на прашалник на старата табела без партиции.
     234
     235{{{
     236EXPLAIN ANALYSE
     237SELECT *
     238FROM customer_old
     239WHERE store_id = 2;
     240}}}
     241
     242[[Image(customer_query.png)]]
     243
     244PostgreSQL мора направи sequential scan и да елиминира 800 000 редови кои не припаѓаат на store_id = 2.
     245
     246Извршување на прашалник на новата табела со партиции
     247
     248{{{
     249EXPLAIN ANALYSE
     250SELECT *
     251FROM customer
     252WHERE store_id = 2;
     253}}}
     254
     255[[Image(customer_query_partition.png)]]
     256
     257Со помош на механизмот pruning PostgreSQL ја скенира само '''customer_store_2''' партицијата каде што store_id=2 и поради тоа се скенираат само 200 000 редови наместо 1 000 000 редови.
     258
     259
     260
     261
     262
     263
     264
     265