Просто размышляю здесь, но одна вещь, которую я представляю, - это оптимизация запросов к базе данных.
Запрос к базе данных на декларативном языке, таком как SQL, должен быть переведен в пошаговую программу, называемую «планом выполнения». Один SQL-запрос обычно может быть преобразован в несколько таких планов выполнения, которые дают один и тот же результат, но могут иметь очень разную производительность. Оптимизатор запросов должен найти самый быстрый или, по крайней мере, достаточно быстрый.
Оптимизаторы запросов на основе затрат имеют «функцию затрат», которую они используют для оценки времени выполнения данного плана. Исчерпывающие оптимизаторы перебирают все возможные планы (для некоторого значения «все возможные») и выбирают самый быстрый. Для сложных запросов количество возможных планов может быть непомерно большим, что приводит к слишком длительному времени оптимизации (еще до того, как вы начнете поиск в базе данных!), поэтому существуют также неполные оптимизаторы. Они смотрят только на некоторые из планов, возможно, с элементом случайности при выборе. Это работает, так как обычно существует большое количество «хороших» планов, и может быть не так важно найти абсолютно лучший план — вероятно, лучше выбрать 5-секундный план вместо оптимального 2-секундного плана. , если требуется несколько минут оптимизации, чтобы найти 2-секундный план.
Некоторые алгоритмы оптимизации используют отсортированную очередь «многообещающих» (частичных) планов. Если на самом деле не имеет значения, найдете ли вы абсолютно лучший план, может быть, вы могли бы использовать почти отсортированную очередь?
Другая идея (и я все еще просто размышляю) - это планировщик процессов или потоков в системе с разделением времени, где может быть не важно, получает ли определенный процесс или поток свой временной интервал на несколько миллисекунд позже, чем если бы он был строго отсортирован по приоритету. .
person
Thomas Padron-McCarthy
schedule
29.09.2008