|
|
|
Тепловые потери в коробке передач
|
|||
|---|---|---|---|
|
#18+
Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. Существует ли какое-нибудь эмпирическое правило, чтобы примерно знать какие потери мы несем с каждым звеном джоина, который лежит между полезной клиентской таблицей с одного конца и пространственно-аналитической таблицей по которой задаются критерии фильтрации с другой стороны, а между ними мы устанавливаем "редукторы", то есть что-то типа коробки передач (трансмисии)? Для примера, два селекта взятых с потолка. Код: sql 1. 2. 3. 4. 5. vs Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 1) Можно ли пользуясь какими-то эмпирическими правилами и размышлениями оценить насколько во втором селекте из-за наличия большего количества каскадов с джоинами будут потери? 2) Насколько вообще допустимо вести речь о тезисах типа: каждый дополнительный джоин увеличивает нагрузку на сервер на 10% и увеличивает скорость на 25%? В данном случае 10% и 25% взяты "с потолка", у меня нет реальных цифр, потому что не представляю что там внутри происходит и как. Я просто для примера взял эти цифры. 3) Или может быть в подобных ситуациях количество вложенных через инты джоинов при количестве записей менее 100 тыс. вообще никакой роли не играет ни по нагрузке на сервер ни по скорости выполнения? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.10.2015, 01:15:21 |
|
||
|
Тепловые потери в коробке передач
|
|||
|---|---|---|---|
|
#18+
Lumix, ...зависит... если таблички б-ф висят в мемори, то каждый поиск по индексу займет 1-10 микросекунд на среднем железе. затем надо смотреть кардиналити этих таблиц: дополнительные таблицы могут размножить результат суммардно в милионы раз....или обрезать результат до одной строчки. ...вообше вы задали ну настолько абстрактный вопрос... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.10.2015, 02:51:06 |
|
||
|
Тепловые потери в коробке передач
|
|||
|---|---|---|---|
|
#18+
Поскольку речь идёт об INNER JOIN, то фактически нужно анализировать два аспекта. Первый - соотношение размножения записей за счёт дубликатов по ключу связывания справа и отсеивания записей слева. Второй - увеличение дисковых операций за счёт считывания дополнительных индексов, отсутствующих в кэше. А дополнительными операциями в памяти в первом приближении можно смело пренебречь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.10.2015, 09:19:56 |
|
||
|
Тепловые потери в коробке передач
|
|||
|---|---|---|---|
|
#18+
Lumix, если ты всё делаешь правильно, join - довольно дешевая операция, а именно n ✖ log m где n количество записей во внешней (отфильтрованной) таблице, m - количество записей во внутренней таблице. все делаешь правильно значит, что join по КНФ (без or), по равенству и по первичному ключу или по полю/полям с индексом. кратко: join-на не нужно бояться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.10.2015, 09:22:54 |
|
||
|
Тепловые потери в коробке передач
|
|||
|---|---|---|---|
|
#18+
javajdbc если таблички б-ф висят в мемори, то каждый поиск по индексу займет 1-10 микросекунд на среднем железе. Таблички в СУБД НИКОГДА не висят в памяти. Это СУБД, а не эксель. Часть данных в памяти (кэш), часть -- на диске. Поиск по индексу занимает мало времени НЕЗАВИСИМО от того, в памяти таблица или не в памяти. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.10.2015, 11:35:53 |
|
||
|
Тепловые потери в коробке передач
|
|||
|---|---|---|---|
|
#18+
MasterZivТаблички в СУБД НИКОГДА не висят в памяти. Это СУБД, а не эксель. Часть данных в памяти (кэш), часть -- на диске. Слишком категорично. На диске - всё. А в памяти - копия некоторой части данных. Возможно, 0%, а, возможно, и все 100%. Чем компактнее таблица и чем чаще она используется, тем больше вероятность, что все 100% данных кэшированы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.10.2015, 11:51:04 |
|
||
|
Тепловые потери в коробке передач
|
|||
|---|---|---|---|
|
#18+
javajdbc...вообше вы задали ну настолько абстрактный вопрос... Вопрос конечно абстрактный, но он больше на понимание принципов поведения. А в целом задача при всей своей абстрактности достаточно изолированная. Это не летели два крокодила, один зеленый, другой на север... :-) MasterZivесли ты всё делаешь правильно, join - довольно дешевая операция, а именно n ✖ log m где n количество записей во внешней (отфильтрованной) таблице, m - количество записей во внутренней таблице. все делаешь правильно значит, что join по КНФ (без or), по равенству и по первичному ключу или по полю/полям с индексом. Немного не понял по поводу алгоритмической цены n * log m, потому что коли тут только два параметра, то возможно вы имели ввиду стоимость запроса без коробки передач вообще, то есть вот так Код: sql 1. 2. 3. Значит ли это, что вы тем самым утверждаете, что если в таблицах коробки передач все поля i являются интовыми примарными ключами, а на все интовые поля m тоже кинуть индекс, то при объемах таблиц cust и metamoz до 100 тыс. записей коробка передач вообще не будет создавать никакого заметного "трения" на фоне стоимости запроса без коробки? Примечания 1) В этой задаче select всегда меньше или равен select count(*) from cust . Всегда. Вне зависимости от "винегрета", хранящегося в таблицах коробки передач. 2) В этой задаче важно выяснить не стоимость самого селекта, а разницу в стоимости между селектом с "коробкой" и без "коробки". - Если окажется, что "коробка" ничего не добавляет, то есть добавляет 10-20% или меньше на фоне основного запроса, ну тогда и хрен с ней (то есть это классная новость). - Но если окажется, что "коробка" по сравнению с прямым запросом увеличивает стоимости в разы, тогда хотелось бы выяснить эмперические правила прироста стоимости при каждом последующем каскаде. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.10.2015, 13:27:01 |
|
||
|
Тепловые потери в коробке передач
|
|||
|---|---|---|---|
|
#18+
Lumixесли окажется, что "коробка" по сравнению с прямым запросом увеличивает стоимости в разы А так вполне может оказаться, и даже то, что LumixВ этой задаче select всегда меньше или равен select count(*) from cust . Всегда. не поможет - потому что по мере прохождения по "коробке" количество записей с исходной сотни может запросто раздуться до миллиарда, а потом снова ужаться до полусотни выходных записей. Понятно, что в этом случае мы только на одних выделениях памяти и кэшированиях на диск потеряем на порядки больше. Опять же понятно, что если выпадает длинная промежуточная цепь джойнов, то и подобных казусов не приключится. Но вопрос в любом случае не то что абстрактный, а даже где-то странноватый. Ну просто потому что трудно представить предметную область, где ОБЕ версии построения БД были бы одинаково правильными. Уж скорее всего они будут одинаково НЕправильными. И существует некая третья возможная структура, которая более оптимальна, чем обе рассматриваемые. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.10.2015, 14:24:57 |
|
||
|
Тепловые потери в коробке передач
|
|||
|---|---|---|---|
|
#18+
AkinaMasterZivТаблички в СУБД НИКОГДА не висят в памяти. Это СУБД, а не эксель. Часть данных в памяти (кэш), часть -- на диске. Слишком категорично. Слишком категорично, потому что это -- модель вычислений СУБД, это не реальное положение дел. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.10.2015, 14:33:43 |
|
||
|
Тепловые потери в коробке передач
|
|||
|---|---|---|---|
|
#18+
Какая блин коробка передач, ты что, тракторист, что ли ? [quot Lumix] Немного не понял по поводу алгоритмической цены n * log m, потому что коли тут только два параметра, то возможно вы имели ввиду стоимость запроса без коробки передач вообще, то есть вот так Это -- стоимость одной операции JOIN-а двух таблиц. Внешняя имеет на входе n записей, внутренняя имеет всего m записей. цена всей операции n * log m, если это NLJ и таблица имеет индекс по условию JOIN-а. n * m, если это NLJ и таблица НЕ имеет индекс по условию JOIN-а. [quot Lumix] Значит ли это, что вы тем самым утверждаете, что если в таблицах коробки передач все поля i являются интовыми примарными ключами, а на все интовые поля m тоже кинуть индекс, то при объемах таблиц cust и metamoz до 100 тыс. записей коробка передач вообще не будет создавать никакого заметного "трения" на фоне стоимости запроса без коробки? Да. Ты понял! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.10.2015, 14:38:48 |
|
||
|
Тепловые потери в коробке передач
|
|||
|---|---|---|---|
|
#18+
MasterZiv, ok! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.10.2015, 19:59:38 |
|
||
|
Тепловые потери в коробке передач
|
|||
|---|---|---|---|
|
#18+
>> MasterZiv] >> Таблички в СУБД НИКОГДА не висят в памяти. не бросайтесь кванторами понапрасну: https://dev.mysql.com/doc/refman/5.0/en/memory-storage-engine.html ...хотя конечно же я имел ввиду кеш... >> Поиск по индексу занимает мало времени НЕЗАВИСИМО >> от того, в памяти таблица или не в памяти. ...и опять не бросайтесь кванторами понапрасну... ...на одном и томже железе единичный поиск по индексу через диск будет как минимум на порядок медленее чем из мемору (кеша). Будет ли это "мало времени" или "много времени" -- зависит от обшего времени выполнения запроса... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.10.2015, 23:26:10 |
|
||
|
|

start [/forum/topic.php?fid=47&msg=39076518&tid=1832613]: |
0ms |
get settings: |
6ms |
get forum list: |
10ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
40ms |
get topic data: |
7ms |
get forum data: |
1ms |
get page messages: |
31ms |
get tp. blocked users: |
1ms |
| others: | 202ms |
| total: | 302ms |

| 0 / 0 |
