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

confguru

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

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

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

-~{}~ 20.09.05 10:18:

Да еще в последнем phpmyadmin - есть замечательная статистика mysql - показывает достаточно много..
 

GrayMaster

Новичок
О каких индексах идёт речь то ? У меня всего один индекс `id`, а обновляется поле `load` - не индекс.
 

Oleg Marchuk

Человек
GrayMaster
У тебя данные в основном обновляются (update) или вставляются (insert)?
 

Фанат

oncle terrible
Команда форума
Oleg Marchuk
не хочешь прочитать ответ на этот вопрос в топике?
 

GrayMaster

Новичок
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-и секунд достигает...
 

Splurov

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

jdoe

Новичок
а индекс по первому символу сделать? если я не совсем запамятовал, mysql позволяет индексировать часть строки.
 

camka

не самка
При использовании LEFT(title,1) = 'A' не будет использоваться индекс, если он присутствует на поле title. В этом случае оптимальней использовать LIKE title = 'A%' на проиндексированный по первому символу столбец title.
 

GrayMaster

Новичок
индекс по первому символу сделать
Это как я понял - динамическое поле, содержимое первую букву тайтла !? Если так то как его можно сделать ?

-~{}~ 22.09.05 20:02:

PS пробема со временем запроса была решена... Дело в том что полител винт... Что только не перепробывал :)
Сейчас хочу просто оптимизировать на будующее...
 

Splurov

Новичок
GrayMaster
Примерно так:
ALTER TABLE `table_name` ADD INDEX `index_name`(`column_name`(1))

-~{}~ 22.09.05 23:41:

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