powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Mysql index
21 сообщений из 21, страница 1 из 1
Mysql index
    #39111993
Scorpion15
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день!
Читаю статьи про индексы в mysql, и увидел в некоторых постах, что при использовании индексов, может быть такое что возвращаются неверные данные, или вообще не возвращаются, правда ли это?
...
Рейтинг: 0 / 0
Mysql index
    #39112000
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Scorpion15и увидел в некоторых постахвы ещё на заборах "посты" почитайте
...
Рейтинг: 0 / 0
Mysql index
    #39112015
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пожалуй, один случай такого поведения я могу представить.
Это когда в секции SELECT пишут поле без агрегатных функций, которого нет в группировке.
Правда, такой запрос я бы изначально не считал корректным. Но случаются упертые товарищи, у которых "все работает".
...
Рейтинг: 0 / 0
Mysql index
    #39112032
Scorpion15
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Т.е. если запрос:
SELECT max(*) FROM table GROUP BY id
Он может отработаться некорректно при использовании индексов?
...
Рейтинг: 0 / 0
Mysql index
    #39112035
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Scorpion15Т.е. если запрос:
SELECT max(*) FROM table GROUP BY id
Он может отработаться некорректно при использовании индексов?Такой запрос в принципе не может отработать, в нем синтаксическая ошибка.

А я говорил про запросы такого рода:
Код: sql
1.
2.
3.
SELECT field1, field2
FROM mytable
GROUP BY field1

Значения для поля field2 будет взято из произвольной записи в пределах группы. И появление/удаление индекса может привести к тому, что оно будет взято из другой записи, нежели раньше.
...
Рейтинг: 0 / 0
Mysql index
    #39112039
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нет, такой запрос вообще не отработает.
А вот
Код: sql
1.
select a,b,max(c) from table group by a

может изменить результат в зависимости от имеющихся на данный момент индексов.
Вообще-то он в принципе не обязан выдавать одни и те же данные, но как правило этого не происходит (то, что те самые упёртые товарищи называют "всё работает"). А создание/удаление индексов может ситуацию изменить.
...
Рейтинг: 0 / 0
Mysql index
    #39112202
Scorpion15
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Т.е. проблемы могут возникнуть только при агрегатных функциях? А с остальным проблем быть не должно?
А если все таки надо выполнить такой запрос:
Код: sql
1.
select a,b,max(c) from table group by a


И до индексов допустим все работает нормально, а после нет, то как быть?
...
Рейтинг: 0 / 0
Mysql index
    #39112291
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Scorpion15Т.е. проблемы могут возникнуть только при агрегатных функциях?В моем примере вообще нет агрегатных функций. Они тут ни причем.
...
Рейтинг: 0 / 0
Mysql index
    #39112300
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Scorpion15А если все таки надо выполнить такой запрос:
Код: sql
1.
select a,b,max(c) from table group by a



И до индексов допустим все работает нормально, а после нет, то как быть?Переписывать.
Причем независимо от того, что кажется, как будто работает нормально.

Единственное исключение, когда можно ожидать стабильного результат такого запроса - это когда field1 уникальное поле или первичный ключ той же таблицы, откуда берется поле field2, а группировка делается для того, чтобы скрыть дубли, появляющиеся от соединения с другой таблицей.
...
Рейтинг: 0 / 0
Mysql index
    #39112329
Scorpion15
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Но как я понимаю если field1 одинаковое в пределах группы, но не имеет индекса, запрос будет всегда корректен?
...
Рейтинг: 0 / 0
Mysql index
    #39112344
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Scorpion15Но как я понимаю если field1 одинаковое в пределах группы, но не имеет индекса, запрос будет всегда корректен?field1 будет автоматически одинаковым в пределах группы, т.к. группировка происходит по нему.

Примеры несколько искусственные, на практике они обычно более сложные. И тогда, например, может повлиять индекс, который вообще не по полю field1 и не по полю field2, а по какому-то другому, которое участвует в отборе записей.
...
Рейтинг: 0 / 0
Mysql index
    #39112430
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Scorpion15Добрый день!
Читаю статьи про индексы в mysql, и увидел в некоторых постах, что при использовании индексов, может быть такое что возвращаются неверные данные, или вообще не возвращаются, правда ли это?

Неправда.
...
Рейтинг: 0 / 0
Mysql index
    #39112545
Близнец1980
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Из личного опыта:
Индекс на поле с типом DATETIME, но в запросе передаю просто дату - SELECT не правильно выбрал данные за период.
Делаю DATE(FIELD_DATETIME) - индекс не использует, поэтому надо передавать именно в формате DATETIME, тогда и данные правильно достает и индекс использует.

З.Ы. Может сейчас по другому, MySQL был 5.1, и через драйвер ODBC 3.51.
...
Рейтинг: 0 / 0
Mysql index
    #39112549
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Близнец1980Из личного опыта:
Индекс на поле с типом DATETIME, но в запросе передаю просто дату - SELECT не правильно выбрал данные за период.
Делаю DATE(FIELD_DATETIME) - индекс не использует, поэтому надо передавать именно в формате DATETIME, тогда и данные правильно достает и индекс использует."SELECT не правильно выбрал" - был неверный результат запроса или "не оптимальный" план выполнения запроса?
Первого быть не должно.
А второе может быть запросто, применением функции DATE вы фактически убили возможность применения индекса, это так и должно быть.
...
Рейтинг: 0 / 0
Mysql index
    #39112612
Близнец1980
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoftSELECT не правильно выбрал - был неверный результат запроса или "не оптимальный" план выполнения запроса?
Первого быть не должно.
А второе может быть запросто, применением функции DATE вы фактически убили возможность применения индекса, это так и должно быть.
Именно "был неверный результат запроса", я так и не понял почему, скорее всего из-за драйвера .
При тестировании на реальных данных не все записи попадали в выборку.
Например есть запись со временем '2015-01-02 02:01:01' и '2015-01-02 20:00:01', кто из них может тупо не попасть с запрос с WHERE datevrem BETWEEN '2015-01-02' AND '2015-01-02' я х.з., наверно зависело от положения солнца в небе:).
Если бы реально не столкнулся с этим - не писал бы. После обнаружения этого бага использую только выражение BETWEEN TimeStamp(DateFirst, '00:00:00') AND TimeStamp(DateLast, '23:59:59').
З.Ы. Еще раз MySQL 5.1.32, драйвер ODBC 3.51.27, Подключение через ADO, DELPHI 7, год 2009. Пробовал драйвер 5.1, на тот момент последний, но тоже косяк какой-то вылез, сейчас уже не припомню. На данный момент, естественно, все может быть по другому.
...
Рейтинг: 0 / 0
Mysql index
    #39112614
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Близнец1980Например есть запись со временем '2015-01-02 02:01:01' и '2015-01-02 20:00:01', кто из них может тупо не попасть с запрос с WHERE datevrem BETWEEN '2015-01-02' AND '2015-01-02'А никто из них и не должен попасть в эту выборку.
...
Рейтинг: 0 / 0
Mysql index
    #39112628
Близнец1980
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoftА никто из них и не должен попасть в эту выборку.
Я что-то пропустил наверно?
В реальности там конечно период не один день, а в основном месяц или неделя.
Попадали в выборку даты как начала периода так и окончания, только со временем было напутано.
...
Рейтинг: 0 / 0
Mysql index
    #39112634
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Близнец1980miksoftА никто из них и не должен попасть в эту выборку.
Я что-то пропустил наверно?
В реальности там конечно период не один день, а в основном месяц или неделя.
Попадали в выборку даты как начала периода так и окончания, только со временем было напутано.При сравнении даты и даты со временем первая из них расширяется до 'дата 00:00:00'.
Т.е. BETWEEN '2015-01-02' AND '2015-01-02' будет расширено до BETWEEN '2015-01-02 00:00:00' AND '2015-01-02 00:00:00', что эквивалентно = '2015-01-02 00:00:00' (т.к. границы совпадают).
Если же даты будут разные, то из последней даты будут взяты записи только с нулевым временем.

Это все документировано и ни с каким индексами не связано.
...
Рейтинг: 0 / 0
Mysql index
    #39113048
Scorpion15
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вобщем, я понял, что если запросы писать правильно, то и с индексами проблем не будет....
...
Рейтинг: 0 / 0
Mysql index
    #39113062
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
даже если их писать неправильно, то проблемы не в индексах, а с головой пишущего :)
...
Рейтинг: 0 / 0
Mysql index
    #39113199
Scorpion15
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
))) Согласен!
...
Рейтинг: 0 / 0
21 сообщений из 21, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Mysql index
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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