|
|
|
Alter table t order by id, type
|
|||
|---|---|---|---|
|
#18+
Существует ли какой-нибудь смысл в альтерации InnoDB таблиц в которых хранятся товары, у которых есть группы, а сами товары разбросаны абы как, но 83% запросов приходятся именно на выборку товаров из какой-то заданной группы (тега)? Или наличие индекса по полю группы - это достаточное ускорение, чтобы отжать из таблицы все, на что она способна по скорости? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.10.2015, 01:21:17 |
|
||
|
Alter table t order by id, type
|
|||
|---|---|---|---|
|
#18+
Lumixable t order by id, type https://dev.mysql.com/doc/refman/5.1/en/alter-table.html ORDER BY does not make sense for InnoDB tables because InnoDB always orders table rows according to the clustered index. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.10.2015, 06:52:28 |
|
||
|
Alter table t order by id, type
|
|||
|---|---|---|---|
|
#18+
LumixИли наличие индекса по полю группы - это достаточное ускорение, чтобы отжать из таблицы все, на что она способна по скорости?Если вопрос стоит "отжать все и любой ценой" на чтение, то можно использовать покрывающие индексы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.10.2015, 09:49:53 |
|
||
|
Alter table t order by id, type
|
|||
|---|---|---|---|
|
#18+
miksoftиспользовать покрывающие индексы. javajdbcto the clustered index. Это один и тот же зверь clustererd/покрывающий индекс? И если да, то чем они отличаются от обычных индексов? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.10.2015, 12:30:07 |
|
||
|
Alter table t order by id, type
|
|||
|---|---|---|---|
|
#18+
Lumixmiksoftиспользовать покрывающие индексы.javajdbcto the clustered index. Это один и тот же зверь clustererd/покрывающий индекс? И если да, то чем они отличаются от обычных индексов?Нет, это не одно и то же. clustererd индекс - в InnoDB это способ хранения данных в таблице. Фактически это индекс первичного ключа в котором "довеском" к каждой записи хранятся все остальные поля таблицы. Покрывающий индекс не привязан к конкретному движку, но логически привязан к конкретному запросу или их семейству. Суть его в том, что в нем хранятся все поля таблицы, которые нужны для выполнения этих конкретных запросов. Разумеется первые по порядку поля должны быть те, которые нужны для отбора (и иногда сортировки) записей. С точки зрения СУБД это обычный индекс. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.10.2015, 12:37:48 |
|
||
|
Alter table t order by id, type
|
|||
|---|---|---|---|
|
#18+
блин, пока разбирался, такая мешанина терминов!! column index - синоним для index clustered index - синоним для primary key, как бы самый главный дефолтный "secondary index", только на всю таблицу сразу covering index - покрывающий индекс, то есть индекс, все поля которого есть в запросе secondary index - копия таблицы для небольшого подмножества колонок, перечисленных в списке индекса, разновидность покрывающего индекса multiple-column index - индекс с несколькими колонками (разновидность покрывающего индекса) - composite index - синоним для multiple-column index - combined index - синоним для multiple-column index - compound index - синоним для multiple-column index * Короче, по моему вопросу из официальной доки из словарика вот такую фразу выдернул авторIn the Oracle Database product, this type of table is known as an index-organized table. И получается, что любая innoDB - это уже изначально сортированная таблица, поэтому вместо того, чтобы делать по ней alter ... order by достаточно просто правильно составить составной примарный ключ и он будет и покрывающим и таблицу внутри себя будет хранить в отсортированном виде ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.10.2015, 13:41:11 |
|
||
|
Alter table t order by id, type
|
|||
|---|---|---|---|
|
#18+
LumixИ получается, что любая innoDB - это уже изначально сортированная по ПК таблица, поэтому вместо того, чтобы делать по ней alter ... order by достаточно просто правильно составить составной примарный ключ и он будет и покрывающим и таблицу записи с нужными колонками внутри себя будет хранить в отсортированном виде ... поп равел ... покрываюший ключ для конкретных запросов не связан с ПК ключом, который определяется обшим дезайном. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.10.2015, 14:05:10 |
|
||
|
Alter table t order by id, type
|
|||
|---|---|---|---|
|
#18+
Lumix clustered index - синоним для primary keyТолько для InnoDB, но не для MyISAM. Lumix covering index - покрывающий индекс, то есть индекс, все поля которого есть в запросеНаоборот, все поля запроса есть в индексе. Если в индексе будут "лишние" поля, то он не перестанет от этого быть покрывающим. Lumix secondary index - копия таблицы для небольшого подмножества колонок, перечисленных в списке индекса, разновидность покрывающего индексаНе "разновидность". Покрывающие индексы обычно являются вторичными индексами, но далеко не всегда вторичные индексы являются покрывающими. Lumix multiple-column index - индекс с несколькими колонками (разновидность покрывающего индекса)Аналогично - индексы с несколькими колонками далеко не всегда являются покрывающими. Т.е. формально покрывающий индекс может быть из одного поля и совпадать с первичным ключом. Т.е. он не будет ни secondary, ни multiple-column. Это редко, но бывает. Lumixпримарный ключ и он будет и покрывающим и таблицу внутри себя будет хранить в отсортированном видеНе совсем так. Чтобы индекс был "правильным" покрывающим (а "неправильные" и не нужны) нужно еще и чтобы его начальные поля способствовали ускорению запроса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.10.2015, 14:05:54 |
|
||
|
Alter table t order by id, type
|
|||
|---|---|---|---|
|
#18+
LumixИ получается, что любая innoDB - это уже изначально сортированная таблица, поэтому вместо того, чтобы делать по ней alter ... order by достаточно просто правильно составить составной примарный ключ и он будет и покрывающим и таблицу внутри себя будет хранить в отсортированном виде Да. Только не думай, что тебе можно убирать из запроса ORDER BY... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.10.2015, 15:05:03 |
|
||
|
Alter table t order by id, type
|
|||
|---|---|---|---|
|
#18+
miksoftLumix clustered index - синоним для primary keyТолько для InnoDB, но не для MyISAM. Правильно ли я понимаю, что создаваая на myisam ключ alter t add clustered key pageId мы тем самым как бы вручную превращаем myisam в innodb. То есть официально, "на бумаге" она остается myisam, а по факту фигачит как innodb. Верный ход мысли и понимания? miksoftLumix covering index - покрывающий индекс, то есть индекс, все поля которого есть в запросеНаоборот, все поля запроса есть в индексе. Если в индексе будут "лишние" поля, то он не перестанет от этого быть покрывающим. Правильно ли понимаю, что покрывающий - это когда ВООБЩЕ не происходит обращения таблице, а выборка идет исключительно через индекс? Вопрос: это чисто бюрокаратическое/академическое замечание или индекс действительно перестает быть покрывающим? Код: sql 1. 2. 3. 4. 5. 6. Есть ли в данном смысле в целях использования покрывающего индекса все не входящие в индекс поля кидать в джоин? Код: sql 1. miksoftLumix secondary index - копия таблицы для небольшого подмножества колонок, перечисленных в списке индекса, разновидность покрывающего индексаНе "разновидность". Покрывающие индексы обычно являются вторичными индексами, но далеко не всегда вторичные индексы являются покрывающими. Ок, этот момент ясен. Вопрос: Можно ли примарный ключ, кинутый на id, считать покрывающим для всех запросов типа таких? Правда ли, что в этом случае чтения таблицы не происходит, а результаты забираются только из индекса? Код: sql 1. miksoftЧтобы индекс был "правильным" покрывающим (а "неправильные" и не нужны) нужно еще и чтобы его начальные поля способствовали ускорению запроса. Прошу уточнить что имеется ввиду под этой туманной и загадочной формулировкой "способствовали ускорению". Или может вы имеете ввиду банальные ситуации когда индексы бесполезны для like '%some' случаев? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.10.2015, 20:18:06 |
|
||
|
Alter table t order by id, type
|
|||
|---|---|---|---|
|
#18+
Lumix Правильно ли я понимаю, что создаваая на myisam ключ alter t add clustered key pageId мы тем самым как бы вручную превращаем myisam в innodb. То есть официально, "на бумаге" она остается myisam, а по факту фигачит как innodb. Верный ход мысли и понимания? Нет, он скорее всего просто проигнорирует фразу clustered, и создаст обычный индекс. Правильно ли понимаю, что покрывающий - это когда ВООБЩЕ не происходит обращения таблице, а выборка идет исключительно через индекс? Да. Но "вообще не происходит" тут надо понимать достаточно условно -- индекс логически всё же часть таблицы. Вопрос: это чисто бюрокаратическое/академическое замечание или индекс действительно перестает быть покрывающим? /** вариант А2. неужели он перестает быть покрывающим?*/ select a, b, с from t; Да, перестаёт быть покрывающим для этого (второго) запроса. Для первого остаётся. Есть ли в данном смысле в целях использования покрывающего индекса все не входящие в индекс поля кидать в джоин? select a, b from t natural join (select c from t) x Нет, нет смысла. Вопрос: Можно ли примарный ключ, кинутый на id, считать покрывающим для всех запросов типа таких? Правда ли, что в этом случае чтения таблицы не происходит, а результаты забираются только из индекса? select id from t where id > 5; Да. Да. Но только с одной оговоркой -- сервер не обязан использовать покрывающие индексы. Т.е. ты в этом не можешь быть уверен. miksoft Чтобы индекс был "правильным" покрывающим (а "неправильные" и не нужны) нужно еще и чтобы его начальные поля способствовали ускорению запроса. Прошу уточнить что имеется ввиду под этой туманной и загадочной формулировкой "способствовали ускорению". Или может вы имеете ввиду банальные ситуации когда индексы бесполезны для like '%some' случаев? Имелось в виду тупо, что поля, добавляемые в индекс для "покрытия" запроса должны добавляться в него в конец, после полей, которые служат для ускорения выборки (WHERE). Ну и ещё скажу, что я всегда говорю про покрывающие индексы -- это ни в коем случае не "ходовая" техника оптимизации запросов, её нельзя рассматривать как универсальную и применяемую во всех случаях. Даже нельзя рассматривать как часто применяемую и к применению которой надо стремиться. Причина проста: ты не можешь позволить себе бесконечно большое число индексов на таблице. Если при оптимизации условий выборки число индексов стремится к количеству уникально применяемых фильтров на таблицу, то при попытках делать покрывающие индексы число индексов на таблице будет равно в пределе количеству уникальных фильтров умножить на количество уникальных сочетаний полей в списке вывода SELECT-а, т.е. почти комбинаторно расти. Запросов на таблицу чаще всего тоже гораздо больше, чем условий выборки. Именно поэтому нет смысла стремиться сделать покрывающий индекс, если случайно так совпало, что для запроса индекс оказался покрывающим, то можно порадоваться, а специально добавлять в индекс поля, если они не участвуют в фильтрации неинтересно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.10.2015, 21:44:59 |
|
||
|
Alter table t order by id, type
|
|||
|---|---|---|---|
|
#18+
Lumixalter t add clustered key pageIdНет такого синтаксиса в MySQL. И, кстати, в других СУБД этот термин может означать другое понятие. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.10.2015, 22:04:48 |
|
||
|
Alter table t order by id, type
|
|||
|---|---|---|---|
|
#18+
LumixПравильно ли понимаю, что покрывающий - это когда ВООБЩЕ не происходит обращения таблице, а выборка идет исключительно через индекс?Да. Пока подбирал подходящую цитату в доке, нашел любопытный момент: http://dev.mysql.com/doc/refman/5.6/en/index-extensions.html Before MySQL 5.6.9, the optimizer does not take into account the primary key columns of the extended secondary index when determining how and whether to use that index. As of 5.6.9, the optimizer takes the primary key columns into account, which can result in more efficient query execution plans and better performance. А нужная цитата вот: http://dev.mysql.com/doc/refman/5.6/en/mysql-indexes.html In some cases, a query can be optimized to retrieve values without consulting the data rows. (An index that provides all the necessary results for a query is called a covering index.) If a query uses from a table only columns that are included in some index, the selected values can be retrieved from the index tree for greater speed: ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.10.2015, 22:10:56 |
|
||
|
Alter table t order by id, type
|
|||
|---|---|---|---|
|
#18+
MasterZiv, огромное спасибо за ответы! У меня теперь очень качественно сейчас все устаканилось в голове по поводу индексов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.10.2015, 22:13:54 |
|
||
|
Alter table t order by id, type
|
|||
|---|---|---|---|
|
#18+
miksoftПока подбирал подходящую цитату в доке, нашел любопытный момент: http://dev.mysql.com/doc/refman/5.6/en/index-extensions.html Before MySQL 5.6.9, the optimizer does not take into account the primary key columns of the extended secondary index when determining how and whether to use that index. As of 5.6.9, the optimizer takes the primary key columns into account, which can result in more efficient query execution plans and better performance. Получается, что в наших базах данные которые пашут на 5.0.17 двигатель кладет болт на примарные индексы вообще что ли? То есть как бы получается, что нет смысла городить составной примарный индекс, а все равно придется делать отдельный вторичный составной индекс. В этом суть этого абзаца, да? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.10.2015, 22:17:01 |
|
||
|
Alter table t order by id, type
|
|||
|---|---|---|---|
|
#18+
LumixmiksoftЧтобы индекс был "правильным" покрывающим (а "неправильные" и не нужны) нужно еще и чтобы его начальные поля способствовали ускорению запроса.Прошу уточнить что имеется ввиду под этой туманной и загадочной формулировкой "способствовали ускорению". Или может вы имеете ввиду банальные ситуации когда индексы бесполезны для like '%some' случаев?Например, для запроса вида SELECT a,b FROM mytabel WHERE a=10 оба индекса (a,b) и (b,a) будут покрывающими. Но "правильным", т.е. дающим ускорение, будет только (a,b). Индекс (b,a) сможет быть использован только для его полного сканирования, но не для индексного доступа. Да и то, если только явно заставить оптимизатор сделать это. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.10.2015, 22:17:49 |
|
||
|
Alter table t order by id, type
|
|||
|---|---|---|---|
|
#18+
LumixmiksoftПока подбирал подходящую цитату в доке, нашел любопытный момент: пропущено... Получается, что в наших базах данные которые пашут на 5.0.17 двигатель кладет болт на примарные индексы вообще что ли? То есть как бы получается, что нет смысла городить составной примарный индекс, а все равно придется делать отдельный вторичный составной индекс. В этом суть этого абзаца, да?Нет.... Это означает, что индекс (a,b) будет использоваться именно как индекс (a,b). А начиная с версии 5.6.9 он сможет использоваться как (a,b,id), где id - поля первичного ключа. Он же все равно содержит в качестве замыкающих эти поля первичного ключа. Но оптимизатор в старых версиях не умеет учитывать этот факт. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.10.2015, 22:22:55 |
|
||
|
Alter table t order by id, type
|
|||
|---|---|---|---|
|
#18+
miksoftLumixпропущено... Прошу уточнить что имеется ввиду под этой туманной и загадочной формулировкой "способствовали ускорению". Или может вы имеете ввиду банальные ситуации когда индексы бесполезны для like '%some' случаев?Например, для запроса вида SELECT a,b FROM mytabel WHERE a=10 оба индекса (a,b) и (b,a) будут покрывающими. Но "правильным", т.е. дающим ускорение, будет только (a,b). Индекс (b,a) сможет быть использован только для его полного сканирования, но не для индексного доступа. Ок, теперь вообще все по полочкам легло. miksoftДа и то, если только явно заставить оптимизатор сделать это. А чем мы можем форсить оптимизатор? Какие-то ключевые слова есть или модификаторы? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.10.2015, 22:25:08 |
|
||
|
Alter table t order by id, type
|
|||
|---|---|---|---|
|
#18+
LumixmiksoftДа и то, если только явно заставить оптимизатор сделать это. А чем мы можем форсить оптимизатор? Какие-то ключевые слова есть или модификаторы?Да, смотрите доку на SELECT. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.10.2015, 22:26:29 |
|
||
|
Alter table t order by id, type
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2015, 05:27:50 |
|
||
|
Alter table t order by id, type
|
|||
|---|---|---|---|
|
#18+
вадяLumix, в качестве информации http://habrahabr.ru/post/269121/ в конце ещё ссылки..А причем тут эта статья? Да и ссылок я там не вижу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2015, 10:09:29 |
|
||
|
Alter table t order by id, type
|
|||
|---|---|---|---|
|
#18+
miksoftвадяLumix, в качестве информации http://habrahabr.ru/post/269121/ в конце ещё ссылки..А причем тут эта статья? Да и ссылок я там не вижу. раздел - Похожие публикации просто для информации для Lumix , он активно ищет инфу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2015, 14:19:00 |
|
||
|
Alter table t order by id, type
|
|||
|---|---|---|---|
|
#18+
вадяраздел - Похожие публикацииА, понял. У меня на них баннерная слепота. Думал, что где-то в самой статье есть ссылки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2015, 14:29:15 |
|
||
|
Alter table t order by id, type
|
|||
|---|---|---|---|
|
#18+
вадяmiksoftпропущено... А причем тут эта статья? Да и ссылок я там не вижу. раздел - Похожие публикации просто для информации для Lumix , он активно ищет инфу. Я не хожу по ссылкам, которые даны без формулирования краткой мысли или указания на конкретный абзац. Так же я игнорирую различные советы типа читайте доку и т.п. Я считаю, что rtfm или "учи матчасть" - это как бы аналог "пошел на---й". Вы все знаете, что тут на форуме есть очень активный чувак, который постоянно в качестве ответа на конкретный вопрос дает именно такие советы. Я на него вообще не реагирую и у меня сердце кровью обливается, когда я вижу как он своими советами "разводит" новичков. У меня принцип такой: ссылка на статью должна углублять понимание вопроса, а не расширять его. Если на мой конкретный вопрос дают совет прочитать какой-то учебник, то этот совет расширяет пространство и тем самым лишает меня возможности решить конкретный узкий вопрос из-за нехватки ресурсов. Например, для решения и глубокой проработки какого-то вопроса может потребоваться 3 часа, а для изучения материалов, на которые мне дают ссылку может потребоваться 20 дней и самое печальное, что в конечном итоге из этих 20 дней выяснится, что на мой изначальный вопрос материалу было всего-то 3 абзаца на странице 273-274 и вместо чтения учебника достаточно было бы прочитать всего эти три абзаца и это заняло бы 10 минут. Вот пример по каким ссылкам я хожу 18285165 В этом сообщении я привел ссылку и снабдил её краткой выжимкой главной мысли. Таким образом ссылка становится мгновенна понятна любому, а кто хочет деталей - может изучить статью. Если бы эта ссылка была бы дана без этой краткой аннотации, тогда я никогда бы не перешел по ссылке. Например, можно в качестве эксперимента задать ваде вопрос: Вадя, вот вы дали ссылку на статью о миграции с MyISAM на InnoDB. Текущая тема: хранения данных в таблицах в отсортированном виде. приведите пожалуйста хоть одну цитату из этой статьи, которая по вашему мнению имеет отношение к обсуждаемой теме и позволяет более глубоко её понять покажите что для понимания этой мысли мне реально потребовалось бы прочитать целую статью, а не один абзац сообщите какая именно статья из раздела Похожие статьи имеет отношение к обсуждаемой теме покажите что какая-то из этих статей реально требует полного прочтения для понимания, а не какого-то одного абзаца Если вы не сможете выполнить эти пункты, значит вы дали ссылку не для того, чтобы я более глубоко понял конкретный вопрос об упорядоченном хранении данных в таблице, а для того, чтобы перегрузить мой мозг и лишить меня возможности сфокусировано проработать конкретный вопрос. Если вы не сможете выполнить эти пункты, то ваша рекомендация прочитать эту статью - это точно такая же рекомендация как: Lumix, прочитайте все статьи на хабре с ключевым словом InnoDB. Я игнорирую подобные советы, потому что подобные советы может давать любой человек, не будучи даже близко экспертом. Я изучаю внешние ссылки только когда вижу, что эксперт сам проработал этот материал, выжал из него главную мысль по обсуждаемой теме и четко указал какой именно кусок в приведенной ссылке относится к обсуждаемой теме. В этом случае, мне становится понятно, что перейдя по ссылке я более глубоко изучу вопрос и не потеряю время из-за расширения области поиска, спровоцированного "rtfm-троллем". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2015, 17:02:38 |
|
||
|
Alter table t order by id, type
|
|||
|---|---|---|---|
|
#18+
Lumixдля изучения материалов, на которые мне дают ссылку может потребоваться 20 днейА Вы используйте индексный доступ, а не полное сканирование таблицы :) Для этого существует оглавление, которое по сути есть индекс. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2015, 17:12:16 |
|
||
|
|

start [/forum/topic.php?fid=47&msg=39080694&tid=1832593]: |
0ms |
get settings: |
10ms |
get forum list: |
19ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
75ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
60ms |
get tp. blocked users: |
1ms |
| others: | 236ms |
| total: | 418ms |

| 0 / 0 |
