Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Простой запрос вешает mysql на небольшой базе. Почему так?
|
|||
|---|---|---|---|
|
#18+
Добрый день. Ничего как говорится, не предвещало... База во вложении, там и полутора тысяч строк не наберётся. Запрос примитивный. Нужно выбрать из разных таблиц информацию, используя в т.ч. дату. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. Думаю из текста запроса всё понятно, поясню лишь последние две строчки. В таблице issues_worktimes хранится время работы пользователя: дата-время начала и окончания. На определённый день выбирается статистика, в данном случае на 9-е число. Нужно показать всех пользователей, работавших в этот день. Последняя строка запроса выбирает пользователей начавших работать в этот день, предпоследняя - начавших работать раньше заданной даты и окончивших работу после её. Так вот, после того как я дописал закоментированную строку, mysql стала свопить диск и вешаться. В списке процессов, в поле state написано "copying to tmp table on disk". Пробовал и локально, и на хорошем хостинге, результат один - запрос неработоспособен. Причём по отдельности две последние строки работают нормально. Игрался с настройками my.ini, не помогает. Запрос отъедает всю выделенную память, и начинает свопить диск. Таблицы с внешними ключами, если это имеет значение. план запроса: Код: sql 1. 2. 3. 4. 5. 6. Прошу помощи профи, и разъяснения, что я такого страшного написал? Первый раз сталкиваюсь с таким поведением сервера. Локальная версия: Ver 14.14 Distrib 5.5.45, for Win32 (x86) На хостинге: Ver 14.14 Distrib 5.5.54, for debian-linux-gnu (x86_64) using readline 6.2 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2017, 16:13 |
|
||
|
Простой запрос вешает mysql на небольшой базе. Почему так?
|
|||
|---|---|---|---|
|
#18+
possible_keys NULL - вот причина. А также OR в условиях отбора - перепиши на UNION. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2017, 17:31 |
|
||
|
Простой запрос вешает mysql на небольшой базе. Почему так?
|
|||
|---|---|---|---|
|
#18+
Akinapossible_keys NULL - вот причина. А также OR в условиях отбора - перепиши на UNION. А что ключи, они по всем полям стоят. Пробовал и составные и всякие. UNION помог, но ради одной строчки в условии дописывать копию запроса... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2017, 18:27 |
|
||
|
Простой запрос вешает mysql на небольшой базе. Почему так?
|
|||
|---|---|---|---|
|
#18+
Victor256UNION помог, но ради одной строчки в условии дописывать копию запроса... Вот то есть заставить сервер пыхтеть, а пользователя сосать лапу - это нормально, а дописать копию запроса программистская гордость не позволяет... приоритеты надо тщательнее выбирать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2017, 23:21 |
|
||
|
Простой запрос вешает mysql на небольшой базе. Почему так?
|
|||
|---|---|---|---|
|
#18+
Victor256Akinapossible_keys NULL - вот причина. А также OR в условиях отбора - перепиши на UNION. А что ключи, они по всем полям стоят. Пробовал и составные и всякие. UNION помог, но ради одной строчки в условии дописывать копию запроса... молодой... :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2017, 00:56 |
|
||
|
Простой запрос вешает mysql на небольшой базе. Почему так?
|
|||
|---|---|---|---|
|
#18+
Victor256Добрый день. Ничего как говорится, не предвещало... База во вложении, там и полутора тысяч строк не наберётся. Запрос примитивный. FROM issues AS i, issues_worktimes AS iw, issue_types AS it, projects AS p, users AS u вот гляди, сейчас я тебе покажу, что звони твой - вовсе не примитивный. у тебя 5 малому, и, говоришь, в них по 1000 записей... положим, у тебя нет индексов вообще, а не только для одной пары таблиц, сколько записей тогда надо будет обработать? issues AS i, issues_worktimes AS iw, ,каждая по 1тыс, 1000 *1000=1000000, следующая таблица - еще *1000 = миллиард, еще одна таблица еще *1000 = 1000 миллиардов, еще одна таблица еще *1000 = миллион миллиардов записей тебе надо обработать, чтобы выполнить твой запрос, Если ты не будешь создавать индексы! 1000**5 = 10**15 строк, а ты говоришь "простой запрос" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2017, 01:05 |
|
||
|
Простой запрос вешает mysql на небольшой базе. Почему так?
|
|||
|---|---|---|---|
|
#18+
AkinaVictor256UNION помог, но ради одной строчки в условии дописывать копию запроса... Вот то есть заставить сервер пыхтеть, а пользователя сосать лапу - это нормально, а дописать копию запроса программистская гордость не позволяет... приоритеты надо тщательнее выбирать. глупые какие-то слова. Я спрашивал, кроме юниона есть варианты? Условий по дате будет ещё много. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2017, 02:09 |
|
||
|
Простой запрос вешает mysql на небольшой базе. Почему так?
|
|||
|---|---|---|---|
|
#18+
положим, у тебя нет индексов вообще, а не только для одной пары таблиц, положим индексы есть. Может, не такие как надо. Ну так на то и форум. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2017, 02:12 |
|
||
|
Простой запрос вешает mysql на небольшой базе. Почему так?
|
|||
|---|---|---|---|
|
#18+
anuta123кроме юниона есть варианты? Условий по дате будет ещё многоЕсть, есть... расплести условия, перейти на R-Tree, конвертировать время в геометрию, изменить структуру хранения, перейти на промышленную СУБД... достаточно? или ещё пару-тройку подкинуть? anuta123глупые какие-то словаГлупо - это, мотивируя какими-то мифическими некрасивостями, создавать неэффективный код. anuta123индексы есть. Может, не такие как надоИными словами, индексов нет. Неужели даже это недоступно к пониманию? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2017, 22:33 |
|
||
|
Простой запрос вешает mysql на небольшой базе. Почему так?
|
|||
|---|---|---|---|
|
#18+
Akinaanuta123кроме юниона есть варианты? Условий по дате будет ещё многоЕсть, есть... расплести условия, перейти на R-Tree, конвертировать время в геометрию, изменить структуру хранения, перейти на промышленную СУБД... достаточно? или ещё пару-тройку подкинуть? anuta123глупые какие-то словаГлупо - это, мотивируя какими-то мифическими некрасивостями, создавать неэффективный код. anuta123индексы есть. Может, не такие как надоИными словами, индексов нет. Неужели даже это недоступно к пониманию? Хоть и в извращенной форме, но спасибо за помощь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2017, 13:53 |
|
||
|
Простой запрос вешает mysql на небольшой базе. Почему так?
|
|||
|---|---|---|---|
|
#18+
Victor256, если правильно понял задачу, то запрос должен быть примерно таким Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2017, 14:51 |
|
||
|
|

start [/forum/topic.php?fid=47&gotonew=1&tid=1830916]: |
0ms |
get settings: |
10ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
41ms |
get topic data: |
14ms |
get first new msg: |
8ms |
get forum data: |
3ms |
get page messages: |
59ms |
get tp. blocked users: |
2ms |
| others: | 240ms |
| total: | 395ms |

| 0 / 0 |
