За последние 24 часа нас посетил 20261 программист и 1081 робот. Сейчас ищут 663 программиста ...

помогите оптимизировать sql запрос

Тема в разделе "MSSQL", создана пользователем lastdays, 17 дек 2020.

  1. lastdays

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

    С нами с:
    27 сен 2012
    Сообщения:
    410
    Симпатии:
    74
    Доброго времени суток.

    Есть таблица (MyISAM), в которой находятся порядка 100 000 записей.
    Необходимо вывести по 2 записи из каждой секции / раздела ( поле section )

    Тестовый запрос
    Код (Text):
    1.  
    2. FLUSH STATUS;
    3. EXPLAIN
    4.  
    5. SELECT `id`, `section`, `closed` FROM (
    6.   SELECT
    7.     `id`, `section`, `closed`,
    8.     if(if(@c_section != section, @c_section := section, '') != '', @k := 0, @k := @k + 1) c
    9.   FROM
    10.     history2, ( select @c_section := '' ) v
    11.   WHERE section > 0 and closed = 0
    12.     ORDER BY section
    13. ) AS t2
    14. WHERE
    15.   c < 2;
    16.  
    17. SHOW STATUS LIKE 'handler%';

    Данные

    Код (Text):
    1. INSERT INTO `history2` (`id`, `closed`, `section`) VALUES
    2. (1, 0, 0),
    3. (2, 0, 0),
    4. (3, 0, 0),
    5. (4, 0, 1),
    6. (5, 0, 1),
    7. (6, 0, 1),
    8. (7, 0, 2),
    9. (8, 0, 2),
    10. (9, 0, 2),
    11. (10, 0, 3),
    12. (11, 0, 3),
    13. (12, 0, 3),
    14. (13, 0, 4),
    15. (14, 0, 4),
    16. (15, 0, 4);

    Ключи

    Код (Text):
    1.  
    2.   ALTER TABLE `history2`
    3.   ADD PRIMARY KEY (`id`),
    4.   ADD KEY `section` (`section`,`closed`) USING BTREE;
    5.  
    6. ALTER TABLE `history2`
    7.   MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=100045;
    8. COMMIT;

    Хотелось бы получить такой вид:

    id section
    5 1
    4 1
    9 2
    8 2
    12 3
    11 3
    15 4
    14 4

    Голова кипит уже :) , спасибо!
     
  2. lastdays

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

    С нами с:
    27 сен 2012
    Сообщения:
    410
    Симпатии:
    74