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 ответов

33 просмотра

"На сколько 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 важен Я читал что не важен.

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

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

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

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта