SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 11.03.2010 23:02:15

fuze
Участник
Зарегистрирован: 25.01.2010
Сообщений: 17

оптимизация запроса с выборкой по первой букве

Доброго времени суток))

помогите пожалуйста с индексами, есть запрос вида:

SELECT UPPER(SUBSTRING(LTRIM( title ) , 1, 1)) AS first_letter, COUNT( id ) AS num
            FROM zbl_uc_items
            WHERE category_id = 1007
            GROUP BY first_letter

Им я выбираю из таблицы первые буквы заголовков, чтобы потом по ним искать.
Делаю индекс по category_id - файлсорт. Если делаю составной индекс - добавляю title, то все равно файлсорт. Примари индекс по id присутствует.
Прикрепил скрин структуры таблицы.


Прикрепленные файлы:
Attachment Icon 01.jpg, Размер: 101,947 байт, Скачано: 431

Неактивен

 

#2 11.03.2010 23:15:40

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5831

Re: оптимизация запроса с выборкой по первой букве

От файлсорта в данном случае вы избавиться не сможете.

Храните первую букву заголовка в базе.

Неактивен

 

#3 11.03.2010 23:29:00

fuze
Участник
Зарегистрирован: 25.01.2010
Сообщений: 17

Re: оптимизация запроса с выборкой по первой букве

Хм... спасибо за ответ. Встречный вопрос:
Возможно ли как-нибудь - если я добавлю еще поле для первой буквы - автоматически при помощи какого-нибудь запроса заполнить это поле?

Неактивен

 

#4 11.03.2010 23:40:10

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5831

Re: оптимизация запроса с выборкой по первой букве

UPDATE zbl_uc_items SET `новое поле` = UPPER(SUBSTRING(LTRIM( title ) , 1, 1));  -- автоматически заполнит данное поле. В дальнейшем лучше сразу заполнять значение при добавлении или изменении строк.

Неактивен

 

#5 11.03.2010 23:53:57

fuze
Участник
Зарегистрирован: 25.01.2010
Сообщений: 17

Re: оптимизация запроса с выборкой по первой букве

Спасибо большое.

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson