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

GrayMaster

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

Мой MySQL запрос очень сильно грузит сервер:
PHP:
SELECT `title`, `id`, `loads`, "1" AS `type` FROM `table1` WHERE `title` REGEXP '^[A]'
UNION ALL
SELECT `title`, `id`, `loads`, "0" AS `type` FROM `table2` WHERE `title` REGEXP '^[A]'
ORDER BY `title;
Такой запрос выполняется 20 секнуд при посещаемости 10.000 (2 таблицы в общем имеют 120.000 рядов).

Запрос SELECT * FROM `table1`WHERE `id`='5'; - выполняется 7 секунд при той же посещаемости... (table1 - 70.000 рядов)

Как можно оптимизировать ?
 

GrayMaster

Новичок
Query execute time: 28.81254
Query execute time: 16.49565
Query execute time: 22.90253
... :(

-~{}~ 20.09.05 00:47:

Да `id`- индекс.
 

Фанат

oncle terrible
Команда форума
что-то мне в это не верится.
запрос SELECT * FROM `table1`WHERE `id`='5'; по таблице с любым количеством записей, выполняется 0 секунд

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

GrayMaster

Новичок
а предыдущий гениальный запрос у тебя регэкспом выбирает из двух одинаковых таблиц все записи, у которых титле начинается на а?
Да натупил тут :) проще ведь `title`[1] = 'A' или что то в этом роде...

А вот на счет SELECT'а - к сожалению правда... В чём может быть дело ? Может ли быть так если:
Server Load 7.05 (1 cpu)
Memory Used 81.23 %
?
 

Фанат

oncle terrible
Команда форума
натупил не только тут.
мало того, что надо использовать LEFT место regexp, так ещё и таблица у тебя должна быть одна.

а что это за сервер у тебя такой интересный?

-~{}~ 19.09.05 22:03:

а вставка у тебя как происходит? по скорости?
 

maxim

Новичок
А что за сервер такой? И как у тебя происходит вставка/выбор в таблицу. и какие индексы.
 

GrayMaster

Новичок
А вот на счёт одной таблицы - хм... даже незнаю... Разные типы. Одна - файлы (т.е. имя файла для скачивания), а другая - небольшой текст...
Сервак вроде не слабенький... Сейчас дождусь ответа от одного чела - напишу...
 

Фанат

oncle terrible
Команда форума
если тебе нуджна выборка из обеих, то таблица должна быть одна.
и я что-то не заметил по запросам, чтобы в ней была большая разница.
 

GrayMaster

Новичок
а вставка у тебя как происходит? по скорости?
вставку не замерял, сейчас проверю...

надо использовать LEFT место regexp
На примере не покажешь как ? ;)

-~{}~ 20.09.05 01:11:

и я что-то не заметил по запросам, чтобы в ней была большая разница.
Там поля которые различаются, это в одной таблице `text` а в другой - `varchar` (50) вот и всё...

Лучше объеденить ?
 

Фанат

oncle terrible
Команда форума
в мане есть пример

-~{}~ 19.09.05 22:14:

лучше объединить
ведь работаешь ты всегда всё равно с обеими?
Хотя такие дикие тормоза, конечно, не из-за этого.

как часто делается вставка?
 

GrayMaster

Новичок
как часто делается вставка?
Вставка не происходит вообще сейчас... Единственное что происходит - чтение и изменение поля `loads`=`lodas`+1.

ведь работаешь ты всегда всё равно с обеими?
Отображение вместе и по отдельности... (чаще вместе).
 

Фанат

oncle terrible
Команда форума
вот я и спрашиваю - как часто происходит обновление?
 

Фанат

oncle terrible
Команда форума
вот постоянное обновление индекса и создаёт нагрузку
 

GrayMaster

Новичок
Понятно, попробую выруюлю счётчик скачиваний. Хотя я видел похожие сайты с такой же базой со счётчиком скачивайний - как там это реализовано тогда !? :(

-~{}~ 20.09.05 02:21:

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

Oleg Marchuk

Человек
Если количество вставок в таблицу намного превышает количество выборок - удали индексы. Потом, данные можно архивировать (переносить из обновляемой таблицы в неизменяемую).
 

GrayMaster

Новичок
Т.е. я правильно сказал, обновления за день (кол-во скачиваний) складывать в одну таблицу, затем то что накопилось в этой таблчке, менять в главной. ?
 

MuXa247

Новичок
Автор оригинала: GrayMaster
Т.е. я правильно сказал, обновления за день (кол-во скачиваний) складывать в одну таблицу, затем то что накопилось в этой таблчке, менять в главной. ?
Правильно. Только у временной таблички поменьше индексов сделай и чисти ее(truncate) каждый день(или час, как тебе угодно) после переноса данных.
 

Фанат

oncle terrible
Команда форума
индексов во временной вообще не нужно вообще-то

-~{}~ 20.09.05 09:59:

по большому счёту, таблица тут вообще не нужна.
в файл кидать, и раз в час скидывать содержимое файла в базу
или там - в 10 минут.
главное, что обновление 1000 записей займёт столько же времени, сколько одна. Как я это понимаю.
Поскольку главное время уходит на перестроение индекса
 
Сверху