Оптимальность производительности запросов сильно зависит от возможности оценивать размер и стоимость производимых промежуточных потоков данных запроса. Во всех основных коммерческих процессорах запросов используется одно скалярное значение для выражения этих оценок для потоков, производимых операциями плана выполнения. В дополнение к этому, обычно предполагается независимость данных операндов каждой операции. В стандартной для индустрии модели стоимости [SACL79] используются оценки из одного значения при предположении независимости операндов; и обычно считается, что эти оценки достаточно стабильны в реалистичных пределах ошибки оценки.
Наш производственный опыт с использованием Rdb противоречит этой уверенности в стабильности оценок. Почти половина всех проблем, связанных с компонентом обработки запросов, связана с нестабильностью оценок и последующим неправильным выбором плана, что приводит к отклонениям в оптимальности производительности на несколько порядков.
Нашему опыту не отвечает при предположение о независимости операндов. Резулярно изучая распечатки многих трасс выполнения запросов заказчиков, мы могли видеть реальное воздействие ANDing, ORing и т.д. на результаты запросов. 10% таблицы, соединенных через AND с другими 10% этой таблицы производили 0%, или 1%, или 10% этой таблицы, и каждый результат появлялся с достаточно большой вероятностью. Эти три случае соответствуют корреляции –1, 0, +1 соответственно, отражая тот факт, что вероятность разной корреляции данных операндов распределена в интервале корреляции [-1,+1] и не концентрируется около нулевой точки этого интервала.
Не выполняя крупного статистического эксперимент для определения вида распределения корреляции в отрезке [-1,+1], мы предположили, что равномерное распределение корреляции в этом интервале более реалистично, чем предположение о нулевой корреляции. Далее мы будем говорить о смешанной корреляции, предполагающей равную вероятность для каждой корреляции.
В поисках причины нестабильности оценок мы провели следующий эксперимент.