База данных: Помогите мне с правильными индексами для таблицы и запроса - PullRequest
0 голосов
/ 20 мая 2010

Я выполняю несколько запросов в своей базе данных и хочу повысить производительность и создал несколько индексов, но я все еще думаю, что время отклика слишком велико, поэтому я хочу посмотреть, смогу ли я создать лучший или другой индекс для увеличения скорость.

Моя схема для таблицы, я думаю, имеет самое большое узкое место, выглядит так:

R_D(  **id** int not null,  **SDD** date not null,  numa int,   numt int,   price decimal,  
FOREIGN KEY (room_type_id) REFERENCES R_T (id)

Что интересно, так это атрибут SDD , который содержит даты (например, 2010-05-20), и в моем запросе я делаю поиск диапазона так: SDD> = '2010-05-03' SDD <'2010-05-08' </p>

У меня есть индекс, который действительно увеличивает производительность, это

INDEX sdd ON R_D (SDD, numa, numt, price, id)

Проблема в том, что когда я выполняю поиск по диапазону на большом расстоянии, например 2010-05-03 и 2010-06-04, для выполнения запроса требуется около 6-10 секунд, и я действительно хотел бы настроить его.

Я попробовал несколько индексов и даже кластерный индекс на SDD, но лучший результат, который я получил, - это пока индекс выше.

Любой совет был бы действительно признателен.

С уважением

Mestika

Ответы [ 2 ]

1 голос
/ 12 апреля 2012
SELECT * FROM YourTable where SDD  BETWEEN  '2010-05-03' and '2010-05-08'

SDD - это хорошо проиндексированный столбец.Если вы используете столбец индекса с BETWEEN, производительность будет хорошей по сравнению с >= или <=.

0 голосов
/ 20 мая 2010

Что произойдет, если вы просто измените запрос на

SELECT * FROM YourTable where SDD >= '2010-05-03' and SDD < '2010-05-08'

Это скажет вам, если ограничение даты вызывает замедление или что-то еще. Также убедитесь, что база данных интерпретирует «2010-05-08» как дату, а не строку. Некоторые базы данных имеют специальный синтаксис для дат, вы можете попробовать

SELECT * FROM YourTable where SDD >= DATE('2010-05-03') and SDD < DATE('2010-05-08')
...