Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Запрос ведет себя странно / 21 сообщений из 21, страница 1 из 1
22.12.2015, 13:27:05
    #39134463
treamz
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос ведет себя странно
Добрый день! Подскажите в чем проблема, немогу понять почему казалось бы в двух одинаковых ситуациях идет разная выборка (перебор)

При запросе
Код: sql
1.
EXPLAIN SELECT id FROM malinku_dialog_user ORDER by datetime ASC LIMIT 0, 88


Получаем


А уже при запросе
Код: sql
1.
EXPLAIN SELECT id FROM malinku_dialog_user ORDER by datetime ASC LIMIT 0, 89


Уже получаем полный перебор таблицы


Структура таблицы такая
...
Рейтинг: 0 / 0
22.12.2015, 13:31:16
    #39134470
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос ведет себя странно
treamz,

Попробуйте сделать OPTIMIZE TABLE этой таблице.
...
Рейтинг: 0 / 0
22.12.2015, 14:12:17
    #39134561
treamz
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос ведет себя странно
Вроде делал и это, все равно не пойму в чем проблема..
...
Рейтинг: 0 / 0
22.12.2015, 14:21:05
    #39134579
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос ведет себя странно
treamzВроде делал и этоПосле этого порог перехода на FULL SCAN сохранился?
...
Рейтинг: 0 / 0
22.12.2015, 14:32:02
    #39134619
treamz
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос ведет себя странно
Нет, все осталось также при LIMIT 89 происходит полное сканирование данных в таблице
...
Рейтинг: 0 / 0
22.12.2015, 14:41:16
    #39134641
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос ведет себя странно
treamz,

Покажите вывод команды:
Код: sql
1.
show variables like '%_table_size'
...
Рейтинг: 0 / 0
22.12.2015, 14:52:34
    #39134667
treamz
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос ведет себя странно
tmp_table_size 16777216
max_heap_table_size 16777216
...
Рейтинг: 0 / 0
22.12.2015, 14:56:10
    #39134676
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос ведет себя странно
Explain убеждает, что существует индекс по `datetime`, скриншот - что такого индекса нет.
WTF?
...
Рейтинг: 0 / 0
22.12.2015, 14:56:29
    #39134677
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос ведет себя странно
treamz,

Объяснить такое поведение пока не могу.

Но могу предложить создать индекс по полю datetime. По идее, должно перейти на работу с индексом независимо от величины в LIMIT.
...
Рейтинг: 0 / 0
22.12.2015, 15:02:12
    #39134682
treamz
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос ведет себя странно
По сути вот это же тоже не верное отображение выполнения операции?

...
Рейтинг: 0 / 0
22.12.2015, 15:10:45
    #39134700
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос ведет себя странно
treamzПо сути вот это же тоже не верное отображение выполнения операции?

Почему же? что тут неверного?
...
Рейтинг: 0 / 0
22.12.2015, 17:09:14
    #39134892
treamz
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос ведет себя странно
Да, ошибся.

Вы не подскажите каким образом выполняется выборка с LIMIT (но без WHERE). Например последние 200 строк. Я так понимаю простой способ не подойдет, потому-что затронет все записи таблицы? Если какие-то либо "хаки"? Например count(*) и потом SELECT ... WHERE id < $count ... LIMIT 200 ?

Заранее благодарен
...
Рейтинг: 0 / 0
22.12.2015, 17:15:42
    #39134901
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос ведет себя странно
treamzВы не подскажите каким образом выполняется выборка с LIMIT (но без WHERE).Вопрос непонятен. Отсутствие WHERE на LIMIT не влияет.

treamzНапример последние 200 строк."Первые" или "последние" записи существуют только при указании сортировки. Без сортировки это будут "какие-то 200 записей".

Опишите саму задачу, а не ваши попытки ее решения.
...
Рейтинг: 0 / 0
22.12.2015, 17:24:28
    #39134912
treamz
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос ведет себя странно
Я выполняю и получаю

...
Рейтинг: 0 / 0
22.12.2015, 17:34:01
    #39134939
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос ведет себя странно
http://dev.mysql.com/doc/refman/5.6/en/limit-optimization.html If you select only a few rows with LIMIT, MySQL uses indexes in some cases when normally it would prefer to do a full table scan.
...
Рейтинг: 0 / 0
22.12.2015, 17:38:24
    #39134950
treamz
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос ведет себя странно
Поэтому я и спрашиваю есть ли хаки? Видимо они основаны на JOIN'ах или других операторах, которые используют индексы
...
Рейтинг: 0 / 0
22.12.2015, 17:46:01
    #39134964
treamz
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос ведет себя странно
"Хак" нашел, всем спасибо!

Код: sql
1.
SELECT * FROM test_table JOIN (SELECT id FROM test_table ORDER BY id LIMIT 0, 300) as b ON b.id = test_table.id
...
Рейтинг: 0 / 0
22.12.2015, 17:51:52
    #39134969
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос ведет себя странно
treamz"Хак" нашел, всем спасибо!

Код: sql
1.
SELECT * FROM test_table JOIN (SELECT id FROM test_table ORDER BY id LIMIT 0, 300) as b ON b.id = test_table.id

Хм, и в чем же "хак"?
В результате все равно будет неизвестное количество записей, как больше 300, так и меньше 300.
...
Рейтинг: 0 / 0
22.12.2015, 18:15:47
    #39134997
treamz
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос ведет себя странно
мне надо выбрать все поля * из таблицы (20к записей).

При простом запросе SELECT * FROM table LIMIT 300 у меня затрагиваются все 20k записей судя по EXPLAIN.

При SELECT * FROM test_table JOIN (SELECT id FROM test_table ORDER BY id LIMIT 0, 300) as b ON b.id = test_table.id у меня затрагиваются только последние 300 записей, которые мне и нужны
...
Рейтинг: 0 / 0
22.12.2015, 20:38:46
    #39135120
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос ведет себя странно
treamzПри простом запросе SELECT * FROM table LIMIT 300 у меня затрагиваются все 20k записей судя по EXPLAIN.
Я же даже ссылку дал... на документацию, между прочим, а не на гороскоп какой.
...
Рейтинг: 0 / 0
22.12.2015, 20:45:03
    #39135126
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос ведет себя странно
treamzПри простом запросе SELECT * FROM table LIMIT 300 у меня затрагиваются все 20k записей судя по EXPLAIN.treamz(SELECT id FROM test_table ORDER BY id LIMIT 0, 300) ... затрагиваются только последние 300 записейВы сравниваете неэквивалентные запросы. Запрос с ORDER BY и без - это разные запросы. Это во-первых.

А во-вторых, в первую очередь надо обеспечить корректный результат запроса. А вам, есть такое ощущение, вообще все равно что он выводит.
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Запрос ведет себя странно / 21 сообщений из 21, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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