50k записей в таблице MySQL. Сайт виснет

12
zexis
На сайте с 09.08.2005
Offline
388
#11
netwind:
не трогайте, пусть зависнет навсегда.
наивно ожидать что мозги разработчику можно вправить добавлением индекса.

Согласен.

Вопрос в теме задан плохо.

Ключевую информацию приходится вытягивать.

Почему ТС сразу не сказал о ключах на таблице – довольно странно.

Если таблицы и запросы хорошо оптимизированы, то 50 000 записей должно без проблем работать даже на виртуальном хостиге.

Подумайте, нужно ли при каждом просмотре добавлять запись в эту таблицу.

Обычно добавления insert при каждом просморе не делаются.

Оптимизация mysql вопрос большой и комплексный.

Начинать его нужно с изучения основ баз данных и чтения всей документации к mysql.

почитайте документацию на команду mysql explain, на лог медленных запросов в mysql.

K
На сайте с 09.08.2007
Offline
134
#12

SELECT * FROM `mytable` WHERE `iduser` = '$iduser'

Нужен ли Вам SELECT всей таблицы (*)? И для чего? Для подсчета статистики? Попробуйте изменить логику подсчета. Ограничить выбор только нужными столбцами. Используйте LIMIT. Циклы в скрипте есть? Избавьтесь от них?

50 тыс для мускул - ерунда. У вас дело не в мускул а в обработке запросов.

На чем сайт? Какая посещаемость? пхп? Время выполнения для пхп?

Andreyka
На сайте с 19.02.2005
Offline
822
#13
Elles:
Сделаю вид, что разработчик это я.

каким образом?
Каждый просмотр - минимум 1 запрос, максимум 2.

Кешируйте

Десять кешев

Не стоит плодить сущности без необходимости
N
На сайте с 06.05.2007
Offline
419
#14

Elles, здесь нужен настоящий разработчик, а не делающий вид.

Кнопка вызова админа ()
PHPExpert
На сайте с 04.02.2006
Offline
104
#15
Elles:
делается запрос на выборку и на добавление данных в таблицу
Elles:
index ставили на iduser, по ощущениям стало еще хуже..

Какие могут быть индексы при большом количестве INSERT'ов? Таблицам где в основном используются SELECT запросы ставьте движок InnoDB, индексируйте поля по которым производится поиск. Многочисленные INSERT запросы лучше делать в MyISAM и с минимальным количеством индексов так как при добавлении значения в индексах "перестраиваются" это занимает много времени. Старайтесь для выборки использовать временные таблицы и типы таблиц MEMORY. Много зависит от задачи которую требуется реализовать. Покажите структуру базы, может что-то смогу подсказать.

Elles:
Так ли критично количество в 50 тысяч?

Это очень мало для любой СУБД.

Слава Шевцов
На сайте с 23.07.2005
Offline
370
#16
Elles:

`idroot` int(9) NOT NULL auto_increment,
`iduser` int(5) NOT NULL,
`idservice` int(9) NOT NULL,
`ip` varchar(16) NOT NULL


Запросы


SELECT * FROM `mytable` WHERE `iduser` = '$iduser'
if {
INSERT INTO `mytable` VALUES ('','$iduser','$idservice','$_SERVER[REMOTE_ADDR]')
}

Вам помогут два шага:

1. Создать индекс по iduser.

2. Отсортировать записи по iduser.

А вообще, такое впечатление, что есть значительно более лёгкий вариант запроса. Что он должен делать?

Неизменность точки зрения неизменно порождает иллюзию понимания.
12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий