Coder Social home page Coder Social logo

12-05's Introduction

Домашнее задание к занятию "«Индексы»" - Дьяконов Алексей

Задание 1. Напишите запрос к учебной базе данных, который вернёт процентное отношение общего размера всех индексов к общему размеру всех таблиц.
    SELECT  SUM(index_length)/SUM(data_length)*100 AS otnoshenie
    FROM INFORMATION_SCHEMA.TABLES
    WHERE table_schema = "sakila";

zadanie_1

Задание 2. Выполните explain analyze запроса:
    EXPLAIN ANALYZE
    SELECT DISTINCT CONCAT(c.last_name, ' ', c.first_name), SUM(p.amount) OVER (PARTITION BY c.customer_id, f.title)
    FROM payment p, rental r, customer c, inventory i, film f
    WHERE DATE(p.payment_date) = '2005-07-30' AND p.payment_date = r.rental_date AND r.customer_id = c.customer_id AND i.inventory_id = r.inventory_id;

Результат выполнения zadanie_2_1

Можно обратить внимание, что основная проблема медленного выполнения в inner hash join (no condition) возникающего из за оконной функции sum(p.amount) over (partition by c.customer_id, f.title). К сожалению информации о том, поддерживают ли оконные функции парционирование по нескольким столбцам из разных таблиц. Поэтому сначала я решил применить inner join в запросе, но не учел, что в таком случае не будет работать distinct. После этого я решил посмотреть в сторогу индексов по этим столбцам, но они уже были созданы. В итоге, внимательно посмотрев на функцию , попробовал удалить f.title и film f из запроса. Вывод запроса не изменился, а скорость исполнения выросла. Добавив индекс по paiment_date получил следующий итог:

    CREATE INDEX payment_date ON payment(payment_date);

    EXPLAIN ANALYZE
    SELECT DISTINCT CONCAT(c.last_name, ' ', c.first_name), SUM(p.amount) OVER (PARTITION BY c.customer_id)
    FROM payment p, rental r, customer c, inventory i
    WHERE DATE(p.payment_date) = '2005-07-30' AND p.payment_date = r.rental_date AND r.customer_id = c.customer_id AND i.inventory_id = r.inventory_id;

Результат выполнения zadanie_2_2

Скорость выполнения запроса выросла, inner hash join (no condition) ушёл

Задание 3.

В PostgreSQL используются следующие индексы:

  1. B-tree используется в MySQL - могут использоваться с < <= = >= >
  2. HASH - используется в MySQL - хранят хеш-код, поэтому используются с =
  3. GiST -представляют собой инфраструктуру, позволяющую реализовать много разных стратегий индексирования. Как следствие, GiST-индексы могут применяться с разными операторами, в зависимости от стратегии индексирования (класса операторов)<< &< &> >> <<| &<| |&> |>> @> <@ ~= &&
  4. SP-GiST - предоставляют инфраструктуру, поддерживающую различные типы поиска. SP-GiST позволяет организовывать на диске самые разные несбалансированные структуры данных. Используются с операторами << >> ~= <@ <<| |>>
  5. GIN - представляют собой «инвертированные индексы», в которых могут содержаться значения с несколькими ключами, например массивы. Используются с операторами - <@ @> = &&
  6. BRIN - (сокращение от Block Range INdexes, Индексы зон блоков) хранят обобщённые сведения о значениях, находящихся в физически последовательно расположенных блоках таблицы. Используется с < <= = >= >

12-05's People

Contributors

alex091987 avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.