170 похожих чатов

Ребят привет, нужна оч помощь прошаренных в реляционных бд Я

сейчас разрабатываю на одном из проектов фильтрацию и эта фильтрация должна быть по возможностям быть как у Яндекс Маркета
много динамических фильтров (если что вся таблица денормализована и все находится в одной таблице кроме 1 джоина на другую таблицу :) )

Мои вопросы:
На сколько Mysql 5.6 туп и нужно подстраивать условия WHERE a=1 AND b=1 или например WHERE b=1 AND a=1 (он под капотом сам сделает ?, а если этих условий больше 10 ?)
Сколько максимум мы можем добавить индексов ?
Как правильно построить эти индексы ? Проверь меня:
СОСТАВНОЙ ИНДЕКС
1 - самое популярное поле (допустим это признак 0/1 товар выложен/ не выложен)
2 - сортировка по этим полям (дата/цена/название)
Все может уже можно остановится ? или:
3 - следующие по популярности поле lattitude
4 - longitude
5 ...
6 ...
16 ...

и так получается что сортировок 3
значит 3 составных индекса по (4 поля) я прав ?
таким образом мы ускорим например большинство запросов

а чтобы ускорить например узкопрофильные запросы мне создать новые индексы и прописать до ограничения в 16 колонок в индексе все эти условия ? или дописать вот в предыдущие индексы сразу? (в чем я сомневаюсь ведь существует правило левого префикса, по всей видимости которое говорит порядок в условии WHERE важен)
как будет работать быстрее ?

Могу ли я построить индексы без первых четырех популярных полей ?


Также что делать если вот есть фильтрация (пример WHERE реального запроса)
((ams.seller_type = 'PRIVATE' AND ams.year >= YEAR(CURRENT_DATE()) - 14 AND ams.inspection_place_latitude BETWEEN 43.68760853 AND 46.38557461 AND ams.inspection_place_longitude BETWEEN 37.16931132 AND 40.98654368 AND ams.km_distance <= 300000 AND COALESCE(ams.is_pledged, 0) = 0 AND ams.published = 1)) ORDER BY ams.sale_started_at DESC LIMIT 50 OFFSET 900

COALESCE попадает под индекс ?

Нужно ли после ввода новых индексов выполнять Optimize Table ? ведь опитмизитор будет ходить уже по протоптаным тропам ? (или лучше использовать конструкцию FORCE INDEX в запросах)


И после того как разберемся с описанным выше
Как выстраивать индексы на OR ? (мульти фильтеринг)
WHERE (
((ams.seller_type = 'PRIVATE' AND ams.year >= YEAR(CURRENT_DATE()) - 14 AND ams.inspection_place_latitude BETWEEN 43.68760853 AND 46.38557461 AND ams.inspection_place_longitude BETWEEN 37.16931132 AND 40.98654368 AND ams.km_distance <= 300000 AND COALESCE(ams.is_pledged, 0) = 0 AND ams.published = 1))
) OR (
((ams.seller_type = 'NO PRIVATE' AND ams.year >= YEAR(CURRENT_DATE()) - 14 AND ams.inspection_place_latitude BETWEEN 43.68760853 AND 46.38557461 AND ams.inspection_place_longitude BETWEEN 37.16931132 AND 40.98654368 AND ams.km_distance <= 300000 AND COALESCE(ams.is_pledged, 0) = 0 AND ams.published = 1))
)

4 ответов

7 просмотров

"На сколько Mysql 5.6 туп и нужно подстраивать условия WHERE a=1 AND b=1 или например WHERE b=1 AND a=1" -> вообще пофиг, mysql сам выберет наиболее селективное и первую очередь выберет его, потом отфильтрует по остальным "Сколько максимум мы можем добавить индексов ? " -> пока у вас место на диске не кончится, но чем больше индексов, тем дольше будет идти вставка в таблицу "Как правильно построить эти индексы ?" -> конкретизируйте, есть разные типы индексов, тут стоит смотреть подробнее, рекомендуется накидывать индексы на наиболее селективные (0\1 обычно не самый удачный вариант) " сортировок 3 значит 3 составных индекса по (4 поля) я прав ? " -> не совсем , индекс может помочь с сортировкой, но лучше все же ориентироваться на то как много запись будет отсеиваться, так же не стоит злоупотреблять составными индексами "которое говорит порядок в условии WHERE важен" -> не важен, а вот порядок полей в составном индексе уже важен все, я устал, в целом, вам стоит больше самостоятельно изучить связанную информацию, и задавать уже более конкретные вопросы )

Dmitry-Gerasin Автор вопроса
Сергей Кравчук
"На сколько Mysql 5.6 туп и нужно подстраивать усл...

за часть ответов спасибо буду искать как посчитать селективность индексов

порядок в условии WHERE важен Я читал что не важен.

Что такое индекс? Есть понимание?

Похожие вопросы

Обсуждают сегодня

а зачем этот вопрос для удаления из чата?
Mёdkinson Medvezhkin
63
Эх кто-то пришел и весь праздник испортил :( You need complex FBX scene importing setup to change things on import? good luck with that. You need navigation and pathfinding? g...
Serg Gini
5
Всем привет! Подскажите. Я написал приложение на Delphi 10.2 Tokyo под Windows 10. И передо мной стал вопрос о том чтобы сделать это приложение кроссплатформенным (под Linux и...
Дмитрий Завгородний
24
Какого хера? /Sources/App/Modules/User/Models/UserLinkApple.swift:21:20: warning: stored property '_id' of 'Sendable'-conforming class 'UserLinkApple' is mutable @ID(...
Alexander Sherbakov
11
У тебя в конфиге нигде нет deny all; или вообще любого deny?
Alexander Sherbakov
10
Почему стало ломаться на D11? "739002.86400000' is not a valid timestamp" function IncDateTime(aStamp:TTimeStamp;aKind:TTriggerKind;aInterval:Integer):TDateTime; //aStamp = 2...
Катерина Свиридова
8
Привет всем. Подскажите где можно посмотреть, какая версия электрон, поддерживает версии windows? Некий changelog. Мне бы желательно, поддержку 7,8,10... latest, как понимаю и...
Anonym Squad
21
Портфолио: Зовут меня Александр, мне 36 лет. Город Пушкино. Общий рабочий стаж: ~14 лет Уровень квалификации: Senior Full-stack developer Где прочесть мой код? https://github....
Magic
10
думаешь я не смогу также сделать? мне это просто не удобно
int 💳 𝙖𝙞𝙧 𝙗𝙞𝙜 𝙗𝙤𝙗 🔫 check bio / spam block / AFK / nohello.com / GMT+3
9
Ребят, чет я уже не догоняю... Крч в коде на асм там происходит нечто вроде a+число (a+1, a+2 и т.д.). Но почему строка lea ecx, [edx+1] работает как a+1?? В edx берется адрес...
Alan 🔝 Бэброу
4
Карта сайта