powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Оптимизация БД... более 3млн записей
12 сообщений из 12, страница 1 из 1
Оптимизация БД... более 3млн записей
    #39276359
Фотография Alexei772
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте

Структура БД из трех таблиц

IDs (документы)
ID(ai), NAME (varchar), VALUE, MARKDEL
около 1млн записей


TEMPLATEs (список шаблонов)
ID(ai), NAME (varchar), MARKDEL
около 30шт записей

IDs+TEMPALTEs
ID(ai), IDs_ID(int), TEMPALTEs_ID(int), MARKDEL, DEFAULT(tinyint)
Около 2млн записей
Каждому документы может соотвесовать нескольок шаблонов.
DEFAULT - какие-то шаблны могут быть по умолчанию, у одной IDs может быть один шаблон по умолчанию

Делаю запрос такого вида:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
SELECT  `IDs`.`ID` ,  `IDs`.`name` ,  `+ ID+templates`.`template_id` AS  `default_template_id` 
FROM  `IDs` 
LEFT JOIN  `+ ID+templates` ON  `+ ID+templates`.`ID` =  `IDs`.`ID` 
WHERE  `IDs`.`markdel` IS NULL 
AND  `+ ID+templates`.`markdel` IS NULL 
AND  `IDs`.`name` LIKE  '%арт%'
AND  `+ ID+templates`.`template_id` =  '3'
ORDER BY  `IDs`.`name` 
LIMIT 500



Делаю запрос... срок исполнения примерно 5-7 секунды
Документы добавляют.... Количество записей в БД растет...
Как праильно оптимизировать БД в таком случае, чтобы поиск составлять 1-2 секунды по названию документа? В идеале конечно 0,003с :-)
...
Рейтинг: 0 / 0
Оптимизация БД... более 3млн записей
    #39276377
Фотография ScareCrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
explain?
...
Рейтинг: 0 / 0
Оптимизация БД... более 3млн записей
    #39276405
Melkij
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ScareCrow,

Alexei772IDs (документы)
ID(ai), NAME (varchar), VALUE, MARKDEL
около 1млн записей
авторAND `IDs`.`name` LIKE '%арт%'
Нет, быстро это работать не будет. Выкиньте это условие и посмотрите результат - если будет бегать шустро - значит упёрлись именно в like. В этом случае попробуйте fulltext поиск использовать. Или уже прикручивать что-то внешнее.

Alexei772LEFT JOIN `+ ID+templates`
AND `+ ID+templates`.`template_id` = '3'
А это явная ошибка. По факту inner join, написано left - только сбивает и без того глупый оптимизатор с толку.
...
Рейтинг: 0 / 0
Оптимизация БД... более 3млн записей
    #39276415
Melkij
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ScareCrow, обращение к вам осталось случайно - не привык я ещё к местному автоматически-подставляемому обращению к автору последнего сообщения в теме.
...
Рейтинг: 0 / 0
Оптимизация БД... более 3млн записей
    #39276418
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexei772,
первое и третье условие перенести в подзапрос, и уже к ниму применить like
...
Рейтинг: 0 / 0
Оптимизация БД... более 3млн записей
    #39276445
Фотография Alexei772
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяAlexei772,
первое и третье условие перенести в подзапрос, и уже к ниму применить like

Извините за мою глупость. Покажите, пожалуйста, пример.
...
Рейтинг: 0 / 0
Оптимизация БД... более 3млн записей
    #39276453
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexei772,
*. ScareCrowexplain?
1. покажите индексы в таблицах, лучше рез-т выполнения
SHOW CREATE TABLE MyTable (для каждой таблицы)
2. и как писали выше (см п.*) рез-т выполнения запроса с EXPLAIN
EXPLAIN SELECT....
так вам подскажут ближе к делу
...
Рейтинг: 0 / 0
Оптимизация БД... более 3млн записей
    #39276490
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexei772,

ddl таблицы давай
...
Рейтинг: 0 / 0
Оптимизация БД... более 3млн записей
    #39276497
Фотография ScareCrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторAND `IDs`.`name` LIKE '%арт%'
авторНет, быстро это работать не будет. Выкиньте это условие и посмотрите результат - если будет бегать шустро - значит упёрлись именно в like

это не так. дополнительное условие может просадить производительность настолько, только если это реально большое поле.
...
Рейтинг: 0 / 0
Оптимизация БД... более 3млн записей
    #39276930
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
при чём тут размер поля? СУБД всё равно всю запись придётся читать (ну даже не запись, страницу, но размер поля здесь опять же не при делах)
скорее такое произойдёт, если остальные условия малоселективны
а по полям/запросу можно предположить, что так оно и есть
...
Рейтинг: 0 / 0
Оптимизация БД... более 3млн записей
    #39277157
Фотография ScareCrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторпри чём тут размер поля?
при том сколько мегабайт надо прочитать. например text/blob читать не придется, ибо в записи только указатель.

дальше в запросе есть фильтрация по этому полю. объем в этом случае тоже критичен.
...
Рейтинг: 0 / 0
Оптимизация БД... более 3млн записей
    #39277434
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ScareCrow, вас так возмутило первое предложение, что до второго вы не дочитали? :)
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Оптимизация БД... более 3млн записей
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]