За последние 24 часа нас посетили 56905 программистов и 1794 робота. Сейчас ищут 890 программистов ...

Оптимизация выборки

Тема в разделе "MySQL", создана пользователем Eser, 28 мар 2011.

  1. Eser

    Eser Активный пользователь

    С нами с:
    16 янв 2007
    Сообщения:
    141
    Симпатии:
    0
    Знающие люди подскажите какие подходы применяются для подобного рода вещей.
    Есть таблица на 500000 записей. У каждой записи два статуса "Выполнено" и "Просроченно"
    Так же в кабинете пользователя два фильтра: Выполнено(столько то штук) и Просроченно(столько то штук). При нажатии на которые уже идет постраничный вывод на экран. Если со статусом "Выполнено" проблем нет. То со статусом "Просроченно" есть проблеммы с производительностью т.к для определения просрочки необходимо ильзовать формулу (Дней отведенных по договору<Кол-во дней по факту=Просрочка). +Ко всему прочему скрипт подсчета выполняется в кабинете пользователя(достаточно один раз в день считать кол-во просрочек).
    Подскажите как это обычно делается?
     
  2. MiksIr

    MiksIr Активный пользователь

    С нами с:
    29 ноя 2006
    Сообщения:
    2.339
    Симпатии:
    44
    Покажие схему данных и сам запрос.
     
  3. Eser

    Eser Активный пользователь

    С нами с:
    16 янв 2007
    Сообщения:
    141
    Симпатии:
    0
    Таблица
    $create=mysql_query
    ("
    create table records
    (id INT UNSIGNED NOT NULL AUTO_INCREMENT,
    PRIMARY KEY (id),
    status int(1),
    date date)
    ;");

    date2=текущая дата,
    date1=дата записи заявки

    Запрос:
    select (to_days(date2)-to_days(date1))>3 from test;
     
  4. MiksIr

    MiksIr Активный пользователь

    С нами с:
    29 ноя 2006
    Сообщения:
    2.339
    Симпатии:
    44
    Если date в records - время добавления записи, и нужно выбрать записи, date у которых был 3 и более дня назад, то
    SELECT * FROM records WHERE date < SUBDATE(NOW(), 3);
    И индекс по date, конечно.
    Вполне себе нормальная выборка.
    Потом поверх можно просто кешировать ее результаты где-то отдельно, в мемкеше, например.