Skip to content
Snippets Groups Projects
Commit 53ec8807 authored by Martin Mareš's avatar Martin Mareš
Browse files

DB: Založeny indexy

Nepřidával jsem je k tabulkám, které by měly být dost malé na to,
aby full scan byl rychlý.

Closes #28.
parent 5e7f4d88
No related branches found
No related tags found
No related merge requests found
...@@ -38,12 +38,14 @@ CREATE TABLE places ( ...@@ -38,12 +38,14 @@ CREATE TABLE places (
-- 4 škola / soutěžní místo -- 4 škola / soutěžní místo
parent int REFERENCES places(place_id), -- NULL pro root parent int REFERENCES places(place_id), -- NULL pro root
name varchar(255) COLLATE "cs_CZ", -- oficiální jméno name varchar(255) COLLATE "cs_CZ", -- oficiální jméno
code varchar(255) COLLATE "cs_CZ", -- zkratka pro zadávání code varchar(255) UNIQUE COLLATE "cs_CZ", -- zkratka pro zadávání
type place_type NOT NULL, type place_type NOT NULL,
nuts varchar(255) UNIQUE DEFAULT NULL, -- evropský NUTS/LAU kód regionu nuts varchar(255) UNIQUE DEFAULT NULL, -- evropský NUTS/LAU kód regionu
note text NOT NULL DEFAULT '' -- uživatelská poznámka note text NOT NULL DEFAULT '' -- uživatelská poznámka
); );
CREATE INDEX places_parent_index ON places (parent);
-- Rekurzivní dotaz na nadřazené regiony: -- Rekurzivní dotaz na nadřazené regiony:
-- WITH RECURSIVE parent_regions(parent, place_id) AS ( -- WITH RECURSIVE parent_regions(parent, place_id) AS (
-- SELECT parent, place_id FROM places WHERE place_id=... -- SELECT parent, place_id FROM places WHERE place_id=...
...@@ -132,6 +134,8 @@ CREATE TABLE participations ( ...@@ -132,6 +134,8 @@ CREATE TABLE participations (
PRIMARY KEY (user_id, contest_id) PRIMARY KEY (user_id, contest_id)
); );
CREATE INDEX participations_contest_id_index ON participations (contest_id, place_id);
-- Úloha -- Úloha
CREATE TABLE tasks ( CREATE TABLE tasks (
task_id serial PRIMARY KEY, task_id serial PRIMARY KEY,
...@@ -161,6 +165,9 @@ CREATE TABLE papers ( ...@@ -161,6 +165,9 @@ CREATE TABLE papers (
note text NOT NULL DEFAULT '' -- komentář uploadujícího note text NOT NULL DEFAULT '' -- komentář uploadujícího
); );
CREATE INDEX papers_for_task_index ON papers (for_task);
CREATE INDEX papers_for_user_index ON papers (for_user);
-- Odevzdané řešení -- Odevzdané řešení
CREATE TABLE solutions ( CREATE TABLE solutions (
task_id int NOT NULL REFERENCES tasks(task_id), task_id int NOT NULL REFERENCES tasks(task_id),
...@@ -171,6 +178,8 @@ CREATE TABLE solutions ( ...@@ -171,6 +178,8 @@ CREATE TABLE solutions (
PRIMARY KEY (task_id, user_id) PRIMARY KEY (task_id, user_id)
); );
CREATE INDEX solutions_user_id_index ON solutions (user_id);
-- Historie přidělování bodů -- Historie přidělování bodů
CREATE TABLE points_history ( CREATE TABLE points_history (
points_history_id serial PRIMARY KEY, points_history_id serial PRIMARY KEY,
...@@ -181,6 +190,8 @@ CREATE TABLE points_history ( ...@@ -181,6 +190,8 @@ CREATE TABLE points_history (
points_at timestamp with time zone NOT NULL -- a kdy points_at timestamp with time zone NOT NULL -- a kdy
); );
CREATE INDEX points_history_index ON points_history (task_id, participant_id);
-- Organizátorská role -- Organizátorská role
CREATE TYPE role_type AS ENUM ( CREATE TYPE role_type AS ENUM (
'garant', -- celostátní garant (může být omezený na kategorii) 'garant', -- celostátní garant (může být omezený na kategorii)
...@@ -225,6 +236,8 @@ CREATE TABLE log ( ...@@ -225,6 +236,8 @@ CREATE TABLE log (
details jsonb NOT NULL -- detaily (závislé na typu) details jsonb NOT NULL -- detaily (závislé na typu)
); );
CREATE INDEX log_type_id_index ON log (type, id);
-- Asynchronní úlohy -- Asynchronní úlohy
CREATE TYPE job_type AS ENUM ( CREATE TYPE job_type AS ENUM (
......
...@@ -54,3 +54,12 @@ CREATE TABLE jobs ( ...@@ -54,3 +54,12 @@ CREATE TABLE jobs (
in_file varchar(255) DEFAULT NULL, in_file varchar(255) DEFAULT NULL,
out_file varchar(255) DEFAULT NULL out_file varchar(255) DEFAULT NULL
); );
ALTER TABLE places ADD CONSTRAINT "places_code_key" UNIQUE (code);
CREATE INDEX places_parent_index ON places (parent);
CREATE INDEX participations_contest_id_index ON participations (contest_id, place_id);
CREATE INDEX papers_for_task_index ON papers (for_task);
CREATE INDEX papers_for_user_index ON papers (for_user);
CREATE INDEX solutions_user_id_index ON solutions (user_id);
CREATE INDEX points_history_index ON points_history (task_id, participant_id);
CREATE INDEX log_type_id_index ON log (type, id);
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment