Модераторы: skyboy
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Разное число rows двух запросов при explain, Запрос почти одинаковый 
:(
    Опции темы
rcdimon
Дата 14.11.2008, 10:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 766
Регистрация: 12.7.2004
Где: Москва

Репутация: нет
Всего: 2



Всем привет. 

У меня есть таблица, в которой хранится большое число строк. Есть колонка с именем date типа DATE.  Строк в таблице много, но разных дат где-то 12-15.

Мне необходимо получить список этих дат.

Код

SELECT DISTINCT
    `date`
FROM
    `action`
ORDER BY
    `date` ASC


Делаю EXPLAIN результат rows - 15

Но мне хотелось бы дату в другом формате.

Код

SELECT DISTINCT
    DATE_FORMAT(`date`, '%d.%m.%Y') AS `date`
FROM
    `action`
ORDER BY
    `date` ASC


Результат EXPLAIN rows - 20'000 (У меня столько строк в таблице)

Получается во втором случае он просматривает всю таблицу.. Почему так? Мне не хотелось бы использовать такой неэфективный запрос, но формал даты хочу получить нужный...

Это сообщение отредактировал(а) rcdimon - 14.11.2008, 10:22
PM MAIL ICQ   Вверх
Akina
Дата 14.11.2008, 10:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 106
Всего: 454



Запросы РАДИКАЛЬНО разные. В одном используется функция - а это filesearch без вариантов. 
PS. Учти просто, что одна и та же функция при нескольких вызовах с одним и тем же параметром имеет право вернуть разные значения. Например, так делает Rand(). И EXPLAIN тоже это знает.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
skyboy
Дата 14.11.2008, 11:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 41
Всего: 260



можно использовать форматирование поверх подзапроса. это вызовет using temporary, но, по идее, только для 15 записей. 
PM MAIL   Вверх
rcdimon
Дата 14.11.2008, 12:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 766
Регистрация: 12.7.2004
Где: Москва

Репутация: нет
Всего: 2



Очень хорошая мысль. Можно, пожалуйста, пример? А то мне выдает 

Цитата

Subquery returns more than 1 row



PM MAIL ICQ   Вверх
Akina
Дата 14.11.2008, 12:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 106
Всего: 454



Код

SELECT
    DATE_FORMAT(`date`, '%d.%m.%Y') AS `date`
FROM
(
SELECT DISTINCT
    `date`
FROM
    `action`
)
ORDER BY
    `date` ASC



--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
rcdimon
Дата 14.11.2008, 12:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 766
Регистрация: 12.7.2004
Где: Москва

Репутация: нет
Всего: 2



Ого, не знал что так можно! Спасибо!

Добавлено через 4 минуты и 5 секунд
Пришлось правда дописать после

FROM (...) AS `table_name`, иначе говорил

Цитата

Every derived table must have its own alias


Вдруг кому-то еще пригодится )
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MySQL | Следующая тема »


 




[ Время генерации скрипта: 0.0504 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.