|
|
|
Оптимизация БД... более 3млн записей
|
|||
|---|---|---|---|
|
#18+
Здравствуйте Структура БД из трех таблиц 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. Делаю запрос... срок исполнения примерно 5-7 секунды Документы добавляют.... Количество записей в БД растет... Как праильно оптимизировать БД в таком случае, чтобы поиск составлять 1-2 секунды по названию документа? В идеале конечно 0,003с :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2016, 15:26 |
|
||
|
Оптимизация БД... более 3млн записей
|
|||
|---|---|---|---|
|
#18+
explain? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2016, 15:36 |
|
||
|
Оптимизация БД... более 3млн записей
|
|||
|---|---|---|---|
|
#18+
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 - только сбивает и без того глупый оптимизатор с толку. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2016, 15:52 |
|
||
|
Оптимизация БД... более 3млн записей
|
|||
|---|---|---|---|
|
#18+
ScareCrow, обращение к вам осталось случайно - не привык я ещё к местному автоматически-подставляемому обращению к автору последнего сообщения в теме. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2016, 15:57 |
|
||
|
Оптимизация БД... более 3млн записей
|
|||
|---|---|---|---|
|
#18+
Alexei772, первое и третье условие перенести в подзапрос, и уже к ниму применить like ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2016, 15:58 |
|
||
|
Оптимизация БД... более 3млн записей
|
|||
|---|---|---|---|
|
#18+
вадяAlexei772, первое и третье условие перенести в подзапрос, и уже к ниму применить like Извините за мою глупость. Покажите, пожалуйста, пример. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2016, 16:15 |
|
||
|
Оптимизация БД... более 3млн записей
|
|||
|---|---|---|---|
|
#18+
Alexei772, *. ScareCrowexplain? 1. покажите индексы в таблицах, лучше рез-т выполнения SHOW CREATE TABLE MyTable (для каждой таблицы) 2. и как писали выше (см п.*) рез-т выполнения запроса с EXPLAIN EXPLAIN SELECT.... так вам подскажут ближе к делу ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2016, 16:22 |
|
||
|
Оптимизация БД... более 3млн записей
|
|||
|---|---|---|---|
|
#18+
Alexei772, ddl таблицы давай ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2016, 16:54 |
|
||
|
Оптимизация БД... более 3млн записей
|
|||
|---|---|---|---|
|
#18+
авторAND `IDs`.`name` LIKE '%арт%' авторНет, быстро это работать не будет. Выкиньте это условие и посмотрите результат - если будет бегать шустро - значит упёрлись именно в like это не так. дополнительное условие может просадить производительность настолько, только если это реально большое поле. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2016, 16:59 |
|
||
|
Оптимизация БД... более 3млн записей
|
|||
|---|---|---|---|
|
#18+
при чём тут размер поля? СУБД всё равно всю запись придётся читать (ну даже не запись, страницу, но размер поля здесь опять же не при делах) скорее такое произойдёт, если остальные условия малоселективны а по полям/запросу можно предположить, что так оно и есть ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2016, 11:30 |
|
||
|
Оптимизация БД... более 3млн записей
|
|||
|---|---|---|---|
|
#18+
авторпри чём тут размер поля? при том сколько мегабайт надо прочитать. например text/blob читать не придется, ибо в записи только указатель. дальше в запросе есть фильтрация по этому полю. объем в этом случае тоже критичен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2016, 15:28 |
|
||
|
|

start [/forum/topic.php?fid=47&msg=39276930&tid=1831561]: |
0ms |
get settings: |
7ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
162ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
39ms |
get tp. blocked users: |
1ms |
| others: | 204ms |
| total: | 436ms |

| 0 / 0 |
