kms писал(а) 12. Июля 2011 :: 15:11:Ну, для начала надо разобраться, что такое составной индекс. К примеру, можно подумать, почему результат по трем условиям для "А,1,1"-"Я,1,1" отличается от результата для "А,1,1"-"Я,1,32". ИМХО в результат работы составного фильтра попадут строки, проходящие проверку ПО ВСЕМ составляющим фильтрам. Потому в данном конкретном случае результат может быть разный. Даже не вдаваясь в исходные данные, по условию фильтра видно, что в результат Первого фильтра ("А,1,1"-"Я,1,1") попадет строк НЕ БОЛЬШЕ (<=), чем в результат работы Второго фильтра ("А,1,1"-"Я,1,32") именно из-за расширенного третьего условия. Например: Исходные данныеА,1,1 А,1,10 А,1,20 А,1,30 А,1,40 А,2,1 А,2,10 А,2,20 А,2,30 А,2,40 А,3,1 А,3,10 А,3,20 А,3,30 А,3,40 Г,1,1 Г,1,10 Г,1,20 Г,1,30 Г,1,40 Г,2,1 Г,2,10 Г,2,20 Г,2,30 Г,2,40 Г,3,1 Г,3,10 Г,3,20 Г,3,30 Г,3,40 По первому фильтру попадут: А,1,1 Г,1,1 По Второму фильтру попадут: А,1,1 А,1,10 А,1,20 А,1,30 Г,1,1 Г,1,10 Г,1,20 Г,1,30 В результате двухдневной битвы с реализацией этого явления в ICPP за 5 минут родилось решение использовать пересечение. Так пример, отправленный мной на форум, быстро оброс кнопочками. Скоротечные решения - не всегда оптимальны, хотя и верны. Сейчас я уже использую цикл по одиночным фильтрам. Результат тот же, но выглядит изящнее и работает быстрее.
|