Новости
Документация
Download
Webboard
Поиск
FAQ/ЧаВо
Обратная связь




MySQL.RU - Webboard



Вернуться
Оптимизация простой но очень большой базы (Alex) 27/09/2009 - 13:50:00
      Re: Оптимизация простой но очень большой базы (bac) 27/09/2009 - 21:34:22
      Re: Оптимизация простой но очень большой базы (Alex) 28/09/2009 - 13:03:55
      Re: Оптимизация простой но очень большой базы (Alex) 30/09/2009 - 17:39:17
      Re: Оптимизация простой но очень большой базы (A2) 12/10/2009 - 10:54:13

> Original message text:
> From: Alex - 27/09/2009 - 13:50:00
> Subject:Оптимизация простой но очень большой базы
> -----------------
> Добрый день!
>
> Есть таблица записей с покупками:
>
> название товара, дата, покупатель, цена
>
> При очередной покупке необходимо найти последнюю покупку этого же товара по названию. Сейчас это делается таким вот запросом:
>
> SELECT цена FROM покупки WHERE название='текущее название' AND дата<='текущая дата' ORDER BY дата DESC LIMIT 1
>
> Проще некуда. Но проблема в том, что размер таблицы с покупками уже превысил 10 млн. записей! Поэтому решил обратиться к вам за идеями.
> Например, можно ли вставлять записи в таблицу с покупками заранее упорядоченно. И тогда бы поиск в таблице завершался при нахождении первой записи?
> Ну вот что-то такое.
> Буду признателен за любые предложения.
>


From: bac - 27/09/2009 - 21:34:22
Subject:Оптимизация простой но очень большой базы
-----------------
Да у вас все ясно. Дело в том, что
1. сначала идет выборка из базы данных по условию
WHERE название='текущее название' AND дата<='текущая дата'
А как я понимаю там скорее всего десятки тысяч записей. Так ?
2. Потом идет сортировка выборки (десятков тысяч)
ORDER BY дата DESC
3. И только потом берется только одна запись

Вот от сюда и тормоза, и чем дальше тем хуже ...

Может проще сделать предварительную выборку
например так
SELECT цена FROM покупки,(
SELECT MAX(дата) AS dm FROM покупки WHERE название='текущее название' AND дата<='текущая дата'
) as s
WHERE название='текущее название' AND покупки.дата=s.dm
DESC LIMIT 1

В данном варианте сначала будет выбрана максимальная дата и если поле проиндексировано, то ответ моментальный
А потом будет выборка только за выбранную дату и без всякой сортировки выборка только одной записи.
Результат сообщите.
Удачи.


[Это сообщение - спам!]

Последние сообщения из форума

Уважаемые посетители форума MySQL.RU!
Убедительная просьба, прежде чем задавать свой вопрос в этом форуме, обратите внимание на разделы:
- ответы на наиболее часто задаваемые вопросы - FAQ
- раздел документация
- раздел поиск по сообщениям форума и документации
Также, старайтесь наиболее подробно указывать свою ситуацию (версию операционной системы, версию MySQL, версию программного обеспечения, по которому возникает вопрос, текст возникающих ошибок, и др.)
Помните, чем конкретнее Вы опишете ситуацию, тем больше шансов получить реальную помощь.
 Имя:
 E-mail:
 Тема:
 Текст:
Код подтверждения отправки: Code
36317



РЕКЛАМА НА САЙТЕ
  Создание сайтов | |