Total runtime: 0.297 ms
(3 rows)
Мы видим, что с типом индекса BTREE, индекс использовался в двух случаях, при операциях = и between. И при этом наблюдалось уменьшение времени выполнения запроса, приблизительно на 25%.
Индекс типа HASH, использовался всего лишь в одном случае, при операции =. И при этом наблюдалось уменьшение времени выполнения запроса, приблизительно на 70%.
· Без функционального индекса по полю типа char
shop=# EXPLAIN ANALYSE select * from products where upper(name)='679487264715 61403';
QUERY PLAN
-----------------------------------------------------------------------------
--------------------
Seq Scan on products (cost=0.00..26.59 rows=5 width=37) (actual time=1.903..1.911 rows=1 loops=1)
Filter: (upper((name)::text) = '679487264715 61403'::text)
Total runtime: 1.934 ms
(3 rows)
shop=# EXPLAIN ANALYSE select * from products where upper(name)!='679487264715 61403';
QUERY PLAN
-----------------------------------------------------------------------------
--------------------------
Seq Scan on products (cost=0.00..26.59 rows=1000 width=37) (actual time=0.019..2.177 rows=1004 loops=1)
Filter: (upper((name)::text) <> '679487264715 61403'::text)
Total runtime: 2.440 ms
(3 rows)
· С функциональным индексом по полю типа char
shop=# EXPLAIN ANALYSE select * from products where upper(name)='679487264715 61403';
QUERY PLAN
-----------------------------------------------------------------------------
------------------------------------
Index Scan using ind_prod on products (cost=0.00..8.27 rows=1 width=37) (actual time=0.088..0.089 rows=1 loops=1)
Index Cond: (upper((name)::text) = '679487264715 61403'::text)
Total runtime: 0.126 ms
(3 rows)
shop=# EXPLAIN ANALYSE select * from products where upper(name)!='679487264715 61403';
QUERY PLAN
-----------------------------------------------------------------------------
--------------------------
Seq Scan on products (cost=0.00..26.59 rows=1004 width=37) (actual time=0.020..2.163 rows=1004 loops=1)
Filter: (upper((name)::text) <> '679487264715 61403'::text)
Total runtime: 2.442 ms
(3 rows)
При использовании индекса наблюдалось уменьшение времени выполнения запроса, приблизительно в 10 раз.
· Наложить ограничения согласно своему варианту. Ограничить поля «цена» и «стоимость» так, чтобы они не содержали значений ниже 10 р. и выше 1500р. Проверить работоспособность ограничений путем добавления в таблицы данных, удовлетворяющих и не удовлетворяющих условиям ограничений.
shop=# ALTER TABLE products ADD CONSTRAINT mega_pr_lower CHECK (priceprod>=10);
ERROR: check constraint "mega_pr_lower" is violated by some row
shop=# delete from products where priceprod<=10;
DELETE 115
shop=# delete from products where id>5;
DELETE 886
shop=# select * from products;
id | name | kolvo | priceprod | idmaster
----+----------------------+-------+-----------+----------
1 | Bread | 500 | 25.5 | 1
2 | Boots | 100 | 1000 | 2
3 | Nektar | 50 | 100 | 3
4 | Cake | 25 | 400 | 4
5 | Ice-Cream | 500 | 40 | 4
(5 rows)
shop=# ALTER TABLE products ADD CONSTRAINT mega_pr_lower CHECK (priceprod>=10);
ALTER TABLE
shop=# ALTER TABLE products ADD CONSTRAINT mega_pr_up CHECK (priceprod<1500);
ALTER TABLE
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.