Оптимизация MySQL запроса - нужна помощь...

Имхо у тебе сервер жутко перегружен
Server Load 7.05 (1 cpu)
смотри за top.

Сделай explain запросу

Убери регексп - сделай дополнительное поле alphabet
- там храни asc код нужной буквы и используй его в запросах

-~{}~ 20.09.05 10:18:

Да еще в последнем phpmyadmin - есть замечательная статистика mysql - показывает достаточно много..
 
О каких индексах идёт речь то ? У меня всего один индекс `id`, а обновляется поле `load` - не индекс.
 
Oleg Marchuk
не хочешь прочитать ответ на этот вопрос в топике?
 
PHP:
SELECT `id` , `title` 
FROM `table1` 
WHERE `title` REGEXP '^[A]'
UNION ALL 
SELECT `id` , `title` 
FROM `table2` 
WHERE `title` REGEXP '^[A]'
ORDER BY `id`;

regxp - бред конечно, на что лучше заменить не меняя структуру БД ? и ещё как можно оптимизировать ?
Фанат предлогал LEFT, но я не понял как его использовать :(

-~{}~ 22.09.05 01:35:

а то время выполнения до 10-и секунд достигает...
 
GrayMaster
Как сказали выше, лучше изменить структуру таблиц.
LEFT это функция mysql. цитата из мануала (на который тебя уже посылали - учись пользоваться поиском):
LEFT(str,len)
Возвращает крайние слева len символов из строки str
Изменением структуру таблиц, при данной выборки, ты добъёшся избавления от юниона и выборке по отдельной колонке для первой буквы. И на счёт регэкспа:.. а LIKE 'A%' не катит - и никаких рэгэксов не нужно?..
 
а индекс по первому символу сделать? если я не совсем запамятовал, mysql позволяет индексировать часть строки.
 
При использовании LEFT(title,1) = 'A' не будет использоваться индекс, если он присутствует на поле title. В этом случае оптимальней использовать LIKE title = 'A%' на проиндексированный по первому символу столбец title.
 
индекс по первому символу сделать
Это как я понял - динамическое поле, содержимое первую букву тайтла !? Если так то как его можно сделать ?

-~{}~ 22.09.05 20:02:

PS пробема со временем запроса была решена... Дело в том что полител винт... Что только не перепробывал :)
Сейчас хочу просто оптимизировать на будующее...
 
GrayMaster
Примерно так:
ALTER TABLE `table_name` ADD INDEX `index_name`(`column_name`(1))

-~{}~ 22.09.05 23:41:

Чтобы понять смысл желательно самому через мануал разобраться. И смысл такого индекса тебе тоже неплохо-бы было понять.
 
Сверху