Ладно, мне кажется, у меня есть несколько основных возможностей:
Возможность № 1: Отсутствующие индексы
Представьте, что в вашей таблице нет индексов в этом поле даты. Поэтому, если вы хотите найти записи, соответствующие вашему запросу ... движок SQL должен просмотреть всю таблицу, чтобы найти то, что он ищет! Идея, стоящая за индексом, заключается в том, что он может быстро найти двоичные записи, соответствующие
Возможность № 2: индексы не используются
Этот диагноз немного сложнее. Вы должны будете использовать любые инструменты анализа запросов, которые MySql дает вам (я не настолько знаком с этим), чтобы понять это. Но, по сути, если у вас есть запрос, в котором движок подсчитывает, что индекс будет возвращать слишком много строк, чтобы оно того стоило, он все равно будет использовать основную таблицу. Например, представьте, что делаете LastName! = "Thomas". Зачем ему использовать индекс, чтобы выяснить, будут ли возвращены 99% строк, а затем попытаться сопоставить его с основной таблицей? Нет - для начала он просто использовал бы основную таблицу.
Возможность № 3: слишком много данных
Возможно, проблема в том, что он просто возвращает много данных. У вас там есть SELECT * - он будет возвращать каждый столбец в таблице. Мало того, что это может быть плохой дизайн (что, если столбец добавляется / вставляется?), Но это означает, что он должен передавать данные, которые могут даже не использоваться.
РЕДАКТИРОВАТЬ: Возможность № 4: Нужен комбинированный индекс
Я впервые неправильно прочитал часть выражения и предположил, что значения p_dt_bas и p_dt_bts являются переменными из внешнего интерфейса, а не дополнительными столбцами в таблице. В этом случае есть другая возможность: он не может использовать какие-либо существующие индексы, потому что они не включают всю информацию. В конце концов, если у вас есть запрос ColA = ColB и отдельные индексы для каждого столбца ... он не может использовать индексы. В конце концов, индекс - это всего лишь своего рода мини-таблица: {индексированные столбцы, указатель на главную таблицу}. Таким образом, использование индекса {ColA, указатель} не помогает найти значения, где ColA = ColB. Вам необходимо иметь ColB в том же индексе . Аналогично, для запроса A