Aisamiery

Aisamiery
Рейтинг
324
Регистрация
12.04.2015
Snake800 #:

ну да. true и false примерно поровну. Индекс из одного поля, другие колонки в отборе не участвуют и индекс не содержит включенных полей для select"a примерно такого вида:

select field1, field2, ... where indexedfield = 0

И второй момент select count() с аналогичным отбором.

Откуда у меня такие сомнения? При отборе с результатом, скажем 50% строк, сервер сначала перебирает индексы для получения ПК, а потом ищет кластеризованный первичный индекс для получения остальных полей строки. Не дешевле ли сразу сканировать всю таблицу?

Я если честно немного не понимаю про что речь =))) Запрос (простой) может использовать только один индекс. В вашем случае если у вас 50% одно значение и 50% другое, то БД будет перебирать только пол таблицы, но это все еще очень дорого если таблица большая, если конечно у вас фильтр не по единственному этому полю, а то если поле одно то и перебирать он не будет. Скажем так, индекс отрезает от таблицы кусок по которому он будет делать поиск и чем больше этот кусок тем дольше будет поиск

Snake800 #:
Пока отцы не разошлись, земной вопрос: не составной индекс на булевых полях (male/female) - зло?

не составной индекс булевый это типа одна колонка где 2 значения? Ну если в целом у вас там во всех строках одно значение то оно не даст буста

LEOnidUKG #:
то на всех них должен быть составной индекс в том же порядке как и в запросе

Это не совсем так, точнее это совсем не так =)) в каком бы порядке вы не составили индекс расположение в where полей индекса никак не влияет на его использование

Snake800 #:
И, еще имхо, коль скоро мы говорим за фактический хайлоад, надо смотреть (тестировать) не только производительность PK

Давайте тут уж по честному, если вы уперлись в производительность индексов (если мы подразумеваем что они используются корректно), то мне кажется тут пора писать своё хранилище, а весь проект уже давно на расте или си переписан =))

PS. И сколько смотрел докладов по хайлоаду, ни одна из топовых компаний не поднимала вопрос о том, в каком формате должен быть праймари кей и если с такой проблемой не столкнулись гиганты типа озона, авито и прочие ребята, то уж думаю местные владельцы проектов уж тем более в жизни не столкнутся чтоб задумываться об этом =)) 

htexture #:
А что это за программа или вебморда на скринах?

Админка битрикса

Snake800 #:
Основная проблема строковых и uuid индексов в их фрагментации (непоследовательности ) - статейка

Я прочитал по диагонали, но мне кажется там проблема в том что транзакции включают инсерты и конечно даже 5к транзакций в секунду это достаточно большая нагрузка на машинку в 8Гб и 4 ядра. Тут люди про сайты на DLE втирают что им ID числовой в урле даст какой то буст производительности =))

Владимир #:
ради интереса решил проверить сам на сайте, к которому есть доступ с ~ 425000 новостями, типичные адреса выглядят так site.com/12345-Sber-vzyal-planku-v-300-rubleiy.html, где  12345 это primary key в базе, а Sber-vzyal-planku-v-300-rubleiy это добавка для псевдо ЧПУ, сделал по этому полю текстовой ключ, и решил сравнить время выборки по идентификатору, например 12345 (в среднем 0.0005 сек), и текстовому ключу, например Sber-vzyal-planku-v-300-rubleiy (в среднем 0.0011 сек), сделал пару десятков выборок, разница, в среднем составила в два раза в пользу выборки по primary key, стоит отметить, что сервер (VDS) не нагружен, если был бы нагружен, то было бы больше

explain одного и второго запроса покажите. Во вторых вы тестируете на VDS я показывал на выделенном сервере, там может майнит крипту у вас кто

И еще важно чтобы поле было NOT NULL и желательно ключ уникальным

Владимир #:

там в выборке всё равно участвует идентификатор, оптимизатор запросов mysql будет использовать его, сравнивайте ТОЛЬКО с выборкой по текстовому ключу

Нет там идентификатора эти числовые поля сами по себе не являются ключами их нельзя использовать отдельно, только все 3 поля вместе и среди 3х полей есть строка.

Владимир #:
и к чему все эти запросы, ГДЕ сравнение с выборкой по текстовому ключу? вы нас не обманете

Четвертый скрин, там есть СТРОКА в выборке =))

Владимир #:
вы просто занимаетесь словоблудием, магии нет, строки занимают больше места, чем числа, сравнение строк накладнее по ресурсам, чем сравнение целых чисел, ваш коллега Sly32 уже признал мою правоту

Вы можете дальше жить в своем неведении и считать что ID в строке даст вам какой то значительный буст =)) 

Sly32 #:
так что по факту да - для простого запроса будет, например быстрее получить статью из базы по полю айди чем по текстовому полю(индексу)

Там если и будет разница, то фактически нивелироваться железом, вот табличка на 1.5kk записей


И в ней 3 индекса, 1 праймари и 2 составных (один чисто числовой, второй имеет строку) и собственно вот запросы

По праймари кею


По первому составному из 2х чисел

И из 2х чисел со строкой

В общем тут на уровне погрешности разница между ними и это вполне логично

Владимир #:

у вас каша в голове, несмотря на то, что вы знаете, что такое b-tree, вы не знаете что такое целые числа, они не хранятся в виде строк!

Я вам задам другой вопрос, кто вам сказал что строки в индексе хранятся в виде строк? =))

Вы можете думать что угодно, я же вам предлагаю проверить.

Всего: 4113