Мы выполнили один и тот же параметризованный запрос на двух разных экземплярах гаечного ключа, оба экземпляра использовали версию 2 оптимизатора. В одном случае оптимизатор выбрал правильный экземпляр, в результате чего было прочитано только 30 строк, а в другом случае оптимизатор не выбрал индекс, и, следовательно, для этого большого объема выполненного параметризованного запроса было выполнено сканирование таблицы из 3 миллионов строк. Наборы данных в двух экземплярах различаются. Однако, учитывая, что для статистики распределения данных доступно 3 миллиона строк, мы считаем, что оптимизатор должен иметь правильную информацию для выбора правильного индекса.
Запрос был очень простым, как показано ниже:
Выберите col1, col2 col3 из table_a, где col4 = @ parameter1 и col5 = @ parameter2
Индекс был на col4, col5 сохранял col3. Он должен прочитать базовую таблицу для col1, col2
Есть ли способ сбросить план выполнения параметризованного запроса на Spanner?
Есть ли способ проверить информацию о распределении данных для table / index?
Будем признательны за любые другие предложения о том, как определить, почему оптимизатор не выбрал индекс. Мы действительно не хотим принудительно использовать индекс в запросах Spanner, если это возможно.