Оптимизация запроса

  1. 9 г. назад

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

    ВЫБРАТЬ
        ПоступлениеТоваровУслуг.Ссылка,
        ПоступлениеТоваровУслуг.Дата
    ПОМЕСТИТЬ втПерваяВыборка
    ИЗ
        Документ.ПоступлениеТоваровУслуг КАК ПоступлениеТоваровУслуг
    ГДЕ
        ПоступлениеТоваровУслуг.Ссылка МЕЖДУ &пДата1 И &пДата2
    ИНДЕКСИРОВАТЬ ПО 
        Дата
    ;
     
    ////////////////////////////////////////////////////////////////////////////////
    ВЫБРАТЬ
        МАКСИМУМ(ПоступлениеТоваровУслуг.Дата) КАК ДатаПрошлогоДокумента,
        втПерваяВыборка.Ссылка.Дата Как ДатаПоставки,
        РАЗНОСТЬДАТ(втПерваяВыборка.Ссылка.Дата, МАКСИМУМ(ПоступлениеТоваровУслуг.Дата), ДЕНЬ) КАК ИнтервалПоставки,
        втПерваяВыборка.Ссылка
    ИЗ
        втПерваяВыборка КАК втПерваяВыборка
            ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПоступлениеТоваровУслуг КАК ПоступлениеТоваровУслуг
            ПО втПерваяВыборка.Дата > ПоступлениеТоваровУслуг.Дата
     
    СГРУППИРОВАТЬ ПО
        втПерваяВыборка.Ссылка
    

    Я понимаю, что причина в ДНК, но где тормоз в запросе то может засесть?

    Ответы: (3) (33) (34) (35) (36) (73) (100) (103)
  2. Период месяц

  3. Лезть смотреть план запроса возможности нет ...

  4. (0) втПерваяВыборка.Ссылка.Дата замени на втПерваяВыборка.Дата

    Ответы: (5) (6)
  5. Ну и сам по себе запрос бредовый

  6. (3) дело в том, что ссылка нужна - по ней идет соединение с заказом клиента

  7. (3) не дочитал - втПерваяВыборка.Ссылка.Дата замени на втПерваяВыборка.Дата - будет ошибка при смене, так как идет группировка по ссылке

    Ответы: (7)
  8. (6) а ты подумай.

    Ответы: (8)
  9. (7) Если тебе кажется, что верно - покажи запрос.

    Ответы: (9)
  10. (8)см 4

    Ответы: (10)
  11. (9) В чем бредовость? Мне нужно получить дату прошлого прихода. И получить время между двумя приходами.

    Ответы: (11)
  12. (10)заставил таки встать.да

    Ответы: (12)
  13. (11) Ну сказал "А" ) Скажи и "Б" )))

    Ответы: (13)
  14. (12) а скажи, зачем тебе дата документа во впемянке

    Ответы: (14)
  15. (13) в вт в смысле? для соединения. что бы не обращаться к таблице базы данных. Скорость критична

    Ответы: (17)
  16. Чем условие во времянке от условия содинения отличается

    Ответы: (16) (31)
  17. (15) там что нет обращения к базе

  18. (14) когда через ссылка.дата ты все равно обращаешься к таблице

  19. Сам запрос громадный и там таки идет обращение к дате через точку
    ДанныеРегистра.Регистратор.Дата

    Ответы: (20) (21) (24)
  20. Я для примера сделал запрос примитивным

    Ответы: (23)
  21. (18) да, таки я в своё время был прав. Select * from *

    Ответы: (22)
  22. (18) за это, обычно, увольняют

    Ответы: (22)
  23. (20) Но и этот примитивный запрос отрабатывает медленно.
    (21) Я от тебя запроса не увидел, за которые не увольняют.

    Ответы: (25)
  24. (19) твой простой пример крив, бессмысленен и беспощаден

    Ответы: (26)
  25. (18) а такое обращение приводит к неявному соединению со всеми таблицами регистраторов

    Ответы: (26)
  26. (22) а я от тебя желание думать

  27. (23) Я понял. Из серии "я крут, но вам не покажу, что бы моя крутость не ослепила всех вокруг"
    (24) Не приводят - там четкая типизация регистратора, я не буду сюда всю распашонку.

    Ответы: (29)
  28. 19.04.2015 18:17:51 отредактировано sapphire
    ВЫБРАТЬ
        ПоступлениеТоваровУслуг.Ссылка,
        ПоступлениеТоваровУслуг.Дата
    ПОМЕСТИТЬ втПерваяВыборка
    ИЗ
        Документ.ПоступлениеТоваровУслуг КАК ПоступлениеТоваровУслуг
    ГДЕ
        //ПоступлениеТоваровУслуг.Ссылка МЕЖДУ &пДата1 И &пДата2
        ПоступлениеТоваровУслуг.Дата МЕЖДУ &пДата1 И &пДата2
    ИНДЕКСИРОВАТЬ ПО 
        Дата
    ;
     
    ////////////////////////////////////////////////////////////////////////////////
    ВЫБРАТЬ
        МАКСИМУМ(ПоступлениеТоваровУслуг.Дата) КАК ДатаПрошлогоДокумента,
        МАКСИМУМ(втПерваяВыборка.Дата) Как ДатаПоставки,
        РАЗНОСТЬДАТ(МАКСИМУМ(втПерваяВыборка.Дата), МАКСИМУМ(ПоступлениеТоваровУслуг.Дата), ДЕНЬ) КАК ИнтервалПоставки,
        втПерваяВыборка.Ссылка
    ИЗ
        втПерваяВыборка КАК втПерваяВыборка
            ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПоступлениеТоваровУслуг КАК ПоступлениеТоваровУслуг
            ПО втПерваяВыборка.Дата > ПоступлениеТоваровУслуг.Дата
     
    СГРУППИРОВАТЬ ПО
        втПерваяВыборка.Ссылка
    
    Ответы: (32)
  29. ПоступлениеТоваровУслуг.Ссылка МЕЖДУ &пДата1 И &пДата2 - опечатка

    Ответы: (31)
  30. (26) ни хрена ты не понял

  31. В любом случае спасибо за помощь

    Ответы: (32)
  32. (28) тебе в (15) был намек

  33. (30) спасибо скажешь если в (27) выведет то, что нужно, учти, если документов много, оно имеет место загибаться и тупить.

  34. 19.04.2015 19:59:31 отредактировано andrewks

    Fynjy ГДЕ ПоступлениеТоваровУслуг.Ссылка МЕЖДУ &пДата1 И &пДата2

    [smile=o_O]

    Ответы: (39)
  35. (0) ничего тут не соптимизируешь, т.к. использование аналитических функций "previous" и "next" всегда были затратными, даже в оракле, где они реализованы.
    Тут только реализовывать храенения прошлого и следующего документв в БД и корректировать эту последовательность при каждой записи

    Ответы: (38)
  36. Fynjy втПерваяВыборка.Ссылка.Дата Как ДатаПоставки, РАЗНОСТЬДАТ(втПерваяВыборка.Ссылка.Дата

    бред какой-то. ты нафига в ВТ вводил поле Дата и индекс по нему делал? чтобы потом не использовать и разыменовывать через ссылку?

    Ответы: (40)
  37. (0) если дата прошлой поставки выходит за рамки периода &пДата1 И &пДата2 - она всё равно должна быть показана?

    Ответы: (37)
  38. (36) конечно

  39. (34) Была мысль о регистре сведений с нужными данными. Но это будет обсуждаться с РП заказчика. У них там это критичная беда.

  40. (33) Когда рисовал примитивный на примере большого - опечатался.

  41. (35)ветку не читал, но решил отметиться?

    Ответы: (41)
  42. (40) дай поумничать-то

    Ответы: (42) (90) (113)
  43. (41)зарадибога :)

  44. Я правильно понимаю, выбираются все поступления от сотворения мира базы?

    Ответы: (45) (58)
  45. ВЫБРАТЬ ПЕРВЫЕ 1

    пардон, если не в кассу.

    Ответы: (46)
  46. (43) да

  47. (44) и чё это?

  48. ну, если надо узнать дату предыдущего прихода, я бы выбирал первый попавшийся по условию.

    Ответы: (48)
  49. (47) ну, давай, нарисуй запрос, раз такой умный

  50. ВЫБРАТЬ
    	ПоступлениеТоваровУслуг.Ссылка,
    	ПоступлениеТоваровУслуг.Дата
    ПОМЕСТИТЬ втПерваяВыборка
    ИЗ
    	Документ.ПоступлениеТоваровУслуг КАК ПоступлениеТоваровУслуг
    ГДЕ
    	ПоступлениеТоваровУслуг.Дата МЕЖДУ &пДата1 И &пДата2
    
    ИНДЕКСИРОВАТЬ ПО
    	ПоступлениеТоваровУслуг.Дата
    ;
    
    ////////////////////////////////////////////////////////////////////////////////
    ВЫБРАТЬ
    	МАКСИМУМ(ПоступлениеТоваровУслуг.Дата) КАК ДатаПрошлогоДокумента,
    	МАКСИМУМ(втПерваяВыборка.Дата) КАК ДатаПоставки,
    	РАЗНОСТЬДАТ(МАКСИМУМ(втПерваяВыборка.Дата), МАКСИМУМ(ПоступлениеТоваровУслуг.Дата), ДЕНЬ) КАК ИнтервалПоставки,
    	втПерваяВыборка.Ссылка
    ИЗ
    	втПерваяВыборка КАК втПерваяВыборка
    		ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПоступлениеТоваровУслуг КАК ПоступлениеТоваровУслуг
    		ПО втПерваяВыборка.Ссылка.МоментВремени > ПоступлениеТоваровУслуг.Ссылка.МоментВремени
    
    СГРУППИРОВАТЬ ПО
    	втПерваяВыборка.Ссылка
    
    УПОРЯДОЧИТЬ ПО
    	ДатаПоставки

    Ну а че не так и долго работает

  51. 20.04.2015 10:04:46 отредактировано Bekas

    вместо

    ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПоступлениеТоваровУслуг КАК ПоступлениеТоваровУслуг

    сделать что-то типа

    ЛЕВОЕ СОЕДИНЕНИЕ ВЫБРАТЬ ПЕРВЫЕ 1 ... ИЗ Документ.ПоступлениеТоваровУслуг КАК ПоступлениеТоваровУслуг
    Ответы: (51)
  52. (50) ты и правда такой наивный, или просто не понимаешь функционирования sql-запросов?

    Ответы: (53) (54) (55)
  53. 20.04.2015 10:08:29 отредактировано MIK

    А вот так - вообще мгновенно )

    ВЫБРАТЬ
    	ПоступлениеТоваровУслуг.Ссылка,
    	ПоступлениеТоваровУслуг.Дата
    ПОМЕСТИТЬ втПерваяВыборка
    ИЗ
    	Документ.ПоступлениеТоваровУслуг КАК ПоступлениеТоваровУслуг
    ГДЕ
    	ПоступлениеТоваровУслуг.Дата МЕЖДУ &пДата1 И &пДата2
    ;
    
    ////////////////////////////////////////////////////////////////////////////////
    ВЫБРАТЬ
    	ПоступлениеТоваровУслуг.Ссылка,
    	ПоступлениеТоваровУслуг.Дата
    ПОМЕСТИТЬ втВтораяВыборка
    ИЗ
    	Документ.ПоступлениеТоваровУслуг КАК ПоступлениеТоваровУслуг
    ГДЕ
    	ПоступлениеТоваровУслуг.Дата МЕЖДУ &пДата1 И &пДата2
    
    ОБЪЕДИНИТЬ ВСЕ
    
    ВЫБРАТЬ ПЕРВЫЕ 1
    	МАКСИМУМ(ПоступлениеТоваровУслуг.Ссылка),
    	МАКСИМУМ(ПоступлениеТоваровУслуг.Дата)
    ИЗ
    	Документ.ПоступлениеТоваровУслуг КАК ПоступлениеТоваровУслуг
    ГДЕ
    	ПоступлениеТоваровУслуг.Дата < &пДата1
    ;
    
    ////////////////////////////////////////////////////////////////////////////////
    ВЫБРАТЬ
    	МАКСИМУМ(втВтораяВыборка.Дата) КАК ДатаПрошлогоДокумента,
    	МАКСИМУМ(втПерваяВыборка.Дата) КАК ДатаПоставки,
    	РАЗНОСТЬДАТ(МАКСИМУМ(втПерваяВыборка.Дата), МАКСИМУМ(втВтораяВыборка.Дата), ДЕНЬ) КАК ИнтервалПоставки,
    	втПерваяВыборка.Ссылка
    ИЗ
    	втПерваяВыборка КАК втПерваяВыборка
    		ЛЕВОЕ СОЕДИНЕНИЕ втВтораяВыборка КАК втВтораяВыборка
    		ПО втПерваяВыборка.Ссылка.МоментВремени > втВтораяВыборка.Ссылка.МоментВремени
    
    СГРУППИРОВАТЬ ПО
    	втПерваяВыборка.Ссылка
    
    УПОРЯДОЧИТЬ ПО
    	ДатаПоставки
    Ответы: (56)
  54. (51) я наивный и и просто не понимаю функционирования sql-запросов. расскажи, в чем ошибка.

    Ответы: (64)
  55. (51) все он понимает, просто лень

  56. (51) как в раз в sql подобное можно сделать, в отличие от мерзкой 1с

    Ответы: (59)
  57. (52) упорядочить по дате убыв

  58. А так запрос короче

    ВЫБРАТЬ
    	ПоступлениеТоваровУслуг.Ссылка,
    	ПоступлениеТоваровУслуг.Дата
    ПОМЕСТИТЬ втПерваяВыборка
    ИЗ
    	Документ.ПоступлениеТоваровУслуг КАК ПоступлениеТоваровУслуг
    ГДЕ
    	ПоступлениеТоваровУслуг.Дата МЕЖДУ &пДата1 И &пДата2
    
    ОБЪЕДИНИТЬ ВСЕ
    
    ВЫБРАТЬ ПЕРВЫЕ 1
    	МАКСИМУМ(ПоступлениеТоваровУслуг.Ссылка),
    	МАКСИМУМ(ПоступлениеТоваровУслуг.Дата)
    ИЗ
    	Документ.ПоступлениеТоваровУслуг КАК ПоступлениеТоваровУслуг
    ГДЕ
    	ПоступлениеТоваровУслуг.Дата < &пДата1
    ;
    
    ////////////////////////////////////////////////////////////////////////////////
    ВЫБРАТЬ
    	МАКСИМУМ(втВтораяВыборка.Дата) КАК ДатаПрошлогоДокумента,
    	МАКСИМУМ(втПерваяВыборка.Дата) КАК ДатаПоставки,
    	РАЗНОСТЬДАТ(МАКСИМУМ(втПерваяВыборка.Дата), МАКСИМУМ(втВтораяВыборка.Дата), ДЕНЬ) КАК ИнтервалПоставки,
    	втПерваяВыборка.Ссылка
    ИЗ
    	втПерваяВыборка КАК втПерваяВыборка
    		ЛЕВОЕ СОЕДИНЕНИЕ втПерваяВыборка КАК втВтораяВыборка
    		ПО втПерваяВыборка.Ссылка.МоментВремени > втВтораяВыборка.Ссылка.МоментВремени
    ГДЕ
    	втПерваяВыборка.Дата МЕЖДУ &пДата1 И &пДата2
    
    СГРУППИРОВАТЬ ПО
    	втПерваяВыборка.Ссылка
    
    УПОРЯДОЧИТЬ ПО
    	ДатаПоставки
    
    Ответы: (61) (76)
  59. Bekas Я правильно понимаю, выбираются все поступления от сотворения мира базы?

    А условие
    ГДЕ
    ПоступлениеТоваровУслуг.Ссылка МЕЖДУ &пДата1 И &пДата2-29114

    Для чего?

    Ответы: (60)
  60. (55) ну, я и имел в виду sql-диалект от 1с

  61. (58) он про второй запрос

    Ответы: (70)
  62. MIK ГДЕ втПерваяВыборка.Дата МЕЖДУ &пДата1 И &пДата2

    а это зачем?

    Ответы: (63)
  63. 20.04.2015 10:18:24 отредактировано MIK

    Еще короче )

    ВЫБРАТЬ
    	ПоступлениеТоваровУслуг.Ссылка,
    	ПоступлениеТоваровУслуг.Дата
    ПОМЕСТИТЬ втПерваяВыборка
    ИЗ
    	Документ.ПоступлениеТоваровУслуг КАК ПоступлениеТоваровУслуг
    ГДЕ
    	ПоступлениеТоваровУслуг.Дата МЕЖДУ &пДата1 И &пДата2
    
    ОБЪЕДИНИТЬ ВСЕ
    
    ВЫБРАТЬ ПЕРВЫЕ 1
    	МАКСИМУМ(ПоступлениеТоваровУслуг.Ссылка),
    	МАКСИМУМ(ПоступлениеТоваровУслуг.Дата)
    ИЗ
    	Документ.ПоступлениеТоваровУслуг КАК ПоступлениеТоваровУслуг
    ГДЕ
    	ПоступлениеТоваровУслуг.Дата < &пДата1
    ;
    
    ////////////////////////////////////////////////////////////////////////////////
    ВЫБРАТЬ
    	МАКСИМУМ(втВтораяВыборка.Дата) КАК ДатаПрошлогоДокумента,
    	МАКСИМУМ(втПерваяВыборка.Дата) КАК ДатаПоставки,
    	РАЗНОСТЬДАТ(МАКСИМУМ(втПерваяВыборка.Дата), МАКСИМУМ(втВтораяВыборка.Дата), ДЕНЬ) КАК ИнтервалПоставки,
    	втПерваяВыборка.Ссылка
    ИЗ
    	втПерваяВыборка КАК втПерваяВыборка
    		ЛЕВОЕ СОЕДИНЕНИЕ втПерваяВыборка КАК втВтораяВыборка
    		ПО втПерваяВыборка.Ссылка.МоментВремени > втВтораяВыборка.Ссылка.МоментВремени
    ГДЕ
    	втПерваяВыборка.Дата >= &пДата1
    
    СГРУППИРОВАТЬ ПО
    	втПерваяВыборка.Ссылка
    
    УПОРЯДОЧИТЬ ПО
    	ДатаПоставки
    
    Ответы: (68) (98)
  64. (61) надо

    Ответы: (65)
  65. Bekas расскажи, в чем ошибка.

    ошибка в том, что если ты прочитаешь 100 книг, а потом 99 выкинешь на помойку, одну положишь на полку,
    или если ты прочитаешь 100 книг и всех их положишь на полку - ты в обоих случаях прочитаешь 100 книг, как ни странно

  66. (63) зачем?

    Ответы: (66)
  67. (65) ну как зачем? отрубить границу снизу которая не входит в анализируемый интервал

    Ответы: (67)
  68. (66) у тебя в ВТ уже это условие выполняется априори, мы же так выбираем в первом запросе

    Ответы: (69)
  69. (62) и ты думаешь, что эти пляски с бубном что-то изменят?

  70. (67) не так, мы там добавляем еще последний документ

    ты шо меня троллишь?

    Ответы: (76)
  71. andrewks он про второй запрос

    Так во втором запросе левой соединение к ВТ - а значит ввыборке участвуют только те записи которые отобраны по указанному условия "ГДЕ"

    Ответы: (71)
  72. (70) да, но перебираются-то все

    Ответы: (72) (73)
  73. (71) как "все"?

    Ответы: (75)
  74. andrewks да, но перебираются-то все

    Запрос в (0) вообще-то ужасный. И по попытке индексировать по дате и по стилю построения.

    А собственно говоря - а какова изначальная постановка задачи - что хотят получить?

    Ответы: (74)
  75. avm3110 что хотят получить?

    денег :)

    ЗЫ. сорри, не удержался.

  76. Bekas как "все"

    Хуже чем все...
    Если базе 10 тыс. доков, а выборкой в ВТ выбрали 100 доков, то для второго запроса будут использовать 100х10000 строк выборки.

    И после этого идёт жалобы - "медленно работает" - естественно

    Ответы: (77)
  77. MIK ты шо меня троллишь?

    да ладно? нет, конечно.

    это ты пытаешься нае... систему заумными конструкциями типа

    MIK ВЫБРАТЬ ПЕРВЫЕ 1 МАКСИМУМ(ПоступлениеТоваровУслуг.Ссылка), МАКСИМУМ(ПоступлениеТоваровУслуг.Дата) ИЗ Документ.ПоступлениеТоваровУслуг КАК ПоступлениеТоваровУслуг ГДЕ ПоступлениеТоваровУслуг.Дата < &пДата1

    ты думаешь, что если написал ВЫБРАТЬ ПЕРВЫЕ 1, то у тебя одна запись только переберётся, и сразу максимум найдётся?

    Ответы: (78) (79)
  78. avm3110 то для второго запроса будут использовать 100х10000 строк выборки.

    в выборке-то также 100 строк будет, а вот перебор будет нешуточный, да

    Ответы: (82)
  79. andrewks если написал ВЫБРАТЬ ПЕРВЫЕ 1, то у тебя одна запись только переберётся

    я в это искренне верю. разве не так?

    Ответы: (80)
  80. andrewks ты думаешь, что если написал ВЫБРАТЬ ПЕРВЫЕ 1

    ага

    лень запустить консоль (с замером времени выполнения) и проверить?

    Ответы: (80)
  81. (78)(79) я слишком взрослый, чтобы верить в сказки

  82. можешь написать тот участок так, без разницы

    ВЫБРАТЬ ПЕРВЫЕ 1
    	ПоступлениеТоваровУслуг.Ссылка,
    	ПоступлениеТоваровУслуг.Дата КАК Дата
    ИЗ
    	Документ.ПоступлениеТоваровУслуг КАК ПоступлениеТоваровУслуг
    ГДЕ
    	ПоступлениеТоваровУслуг.Дата < &пДата1
    
    УПОРЯДОЧИТЬ ПО
    	Дата УБЫВ
    Ответы: (83) (85)
  83. andrewks а вот перебор будет нешуточный, да

    Я про "исходную выборку" для перебора и говорю.
    А так да, раз левое соединение, то в на выходе будет число строк ВТ.

  84. MIK ВЫБРАТЬ ПЕРВЫЕ 1 ПоступлениеТоваровУслуг.Ссылка, ПоступлениеТоваровУслуг.Дата КАК Дата

    Мля...

    Вообще-то у ссылки может быть только одна дата.. поэтому твои
    ВЫБРАТЬ ПЕРВЫЕ 1
    ПоступлениеТоваровУслуг.Ссылка,
    ПоступлениеТоваровУслуг.Дата КАК Дата

    Эквивалентны

    ВЫБРАТЬ ПЕРВЫЕ 1
    ПоступлениеТоваровУслуг.Ссылка,

    и

    ВЫБРАТЬ
    ПоступлениеТоваровУслуг.Ссылка,

  85. а, я понял свою ошибку. извините.

  86. (81) не учите меня выбирать данные запросом - и я не скажу куда вам идти )

    Ответы: (86) (107)
  87. (85) Да уже давно поняли.. укра учить - только окончательно портить...
    Продолжай отбирать таким образом "первые" и дальше, глядишь и АТО окончательно загнётся...

    Ответы: (87) (107)
  88. (86) встали и вышли все у кого нет хотя бы двух спецов )

    Ответы: (88)
  89. MIK у кого нет хотя бы двух спецов

    Ключевое слово - "двух хохлоспецов"... Ну это да... Укр у которого "два хохлоспеца" страшнее бебезяны с гранатой.

  90. товарищи, не выводите срач за рамки предметной области

    Ответы: (90)
  91. (89) это когда примерно так - (41) ?

    Ответы: (91) (92)
  92. (90) ага

    Ответы: (92)
  93. (90)(91) Ну чо, много наоптимизировали?

    Ответы: (93) (95)
  94. (92) ага, на целых 90 постов ;)

    Ответы: (94)
  95. (93) Я смотрю кое-кто пытался изобразить скаляр на 1С-е [smile=:D]

  96. (92) я хотя бы попытался.

    Ответы: (96)
  97. (95) успешно? :)

  98. Дам идею, реализуй сам.
    Вначале выбрать приходы за период + последний приход перед ДатаС, отсортировать по дате.
    Вытащить ее в тз, добавить колонку "Прошлый приход" пройти кодом и расставить в эту колонку ссылку на приход предыдущей строки.
    ТЗ затащить во временную таблицу и далее делать уже вот этот нужный запрос, присоединяя полученную ВТ для определения прошлого прихода.

    Ответы: (98)
  99. (97) так сделали ж уже одним запросом (62), какой нафиг код )

    Ответы: (101)
  100. хотя на очень больших выборках (за миллион документов) можно и так

  101. Новее ›

или зарегистрируйтесь чтобы ответить!