SQLinfo.ru - Все о MySQL

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

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

Вы не зашли.

#1 31.07.2007 15:04:47

stalxed
Участник
Зарегистрирован: 31.07.2007
Сообщений: 3

поиск и вставка

Пишу скрипт на php 5. Использую mysql.
Собственно в БД таблица 100 мегабайт, 1 милион записей.
столбик ник является индексом.
Дальше то в чём возникают сложности. Это то что в минуту нужно добавлять 1000записей, по схеме вначале поиск, потом если поиск отрицательный то вставляем запись.
вот эти два запроса
поиск -$query="SELECT count(*) FROM ".$bdname." WHERE word='$word'";
запись-$query = "INSERT INTO ".$bdname." (id,word,prosmotrov,date) VALUES ('','$word','$prosmotrov',NOW())";
Информация о сервере
CPU : 1000MHz
RAM : 256Mb
ОС  : Fedora Core 5
MySQL : 4.1.21
В общем сервак жутко тормозит... как оптимизировать БД? тока апгрейтом сервера?(переезда на более крутой)
Я новичок в БД так что извеняюсь, если где ступил...

Неактивен

 

#2 31.07.2007 15:57:58

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6756

Re: поиск и вставка

Во-первых, можете попробовать повыбирать тип таблицы. На большом количестве
изменений будет показывать хорошую производительность InnoDB.

Во-вторых, если Вам нужно всего лишь вставить данные (т.е. результат count(*) Вас
не интересует), то можно просто вставлять данные и обрабатывать сообщение об
ошибке. Разумеется, при этом нужно, чтобы у Вас был уникальный ключ на поле word.

В третьих, я не понял, при чем тут поле nick, оно нигде не используется. Если в Вашей
текущей конфигурации нет индекса по полю word, то добавление его решит большинство
Ваших проблем smile

Неактивен

 

#3 31.07.2007 16:31:21

stalxed
Участник
Зарегистрирован: 31.07.2007
Сообщений: 3

Re: поиск и вставка

paulus cпасибо за быстрый ответ!
nick-ну поле называется text просто оно с никами) опечатался... индекс по полю word есть.
как я понял есть два способа оптимизации:
1)уникальным ключём сделать поле ворд
2)использовать InnoDB
второе я не уверен что смогу поставить InnoDB
а первое не могу понять почему даст прирост производительности? ведь всё равно mysql ищет употреблялось ли это значение?

Неактивен

 

#4 31.07.2007 17:19:22

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6756

Re: поиск и вставка

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

В случае двух операций, сервер ищет нужную запись два раза. В случае одной - только
один раз.

Если Вы вынуждены работать с MyISAM, попробуйте, например, установить значение
системной переменной concurrent_insert в 2 - тогда SELECTы не будут блокировать Ваши
INSERTы. Не ждите, однако, от этого огромного повышения производительности: при
таком количестве вставок конфликтовать будут уже сами вставки в таблицу.

Возможно, имеет смысл аггрегировать часть INSERTов во временном хранилище, а потом
вставлять в базу большим куском - это немного уменьшит блокировки таблицы.

Неактивен

 

#5 01.08.2007 22:11:28

stalxed
Участник
Зарегистрирован: 31.07.2007
Сообщений: 3

Re: поиск и вставка

paulus большое спасибо! первое решенгие самое оно. По поводу MyISAM не подходит ибо задача чтоб скрипт легко перенасился...
Ну надеюсь оптимизации в виде одной операции хватит smile нет то уже придётся решать проблемы в виде апгрейта оборудования.

Неактивен

 

Board footer

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