Реклама на сайте Advertise with us

Оптимизировать таблицу (mysql)

Расширенный поиск по форуму
 
Новая тема Новая тема   
Автор
Поиск в теме:



С нами с 21.06.05
Сообщения: 1788
Рейтинг: 1579

Ссылка на сообщениеДобавлено: 30/07/06 в 23:09       Ответить с цитатойцитата 

Скрипт в цикле делает примерно 1000 команд на INSERT, а потом разом делается команда DELETE на удаление всего лишнего.

Потом заходим в phpmyadmin и смотрим на таблицу:
Данные 673,464 Bytes
Индекс 9,216 Bytes
Накладные расходы 607,244 Bytes
Эффективность 75,436 Bytes
Всего 682,680 Bytes

Жмём Оптимизировать таблицу и накладные расходы исчезают.

Вопрос, почему так получается и можно ли избежать после удаления команды OPTIMIZE TABLE tbl?

ВОСТОРГ ЗНАЧИТ BMW

0
 



С нами с 21.06.05
Сообщения: 1788
Рейтинг: 1579

Ссылка на сообщениеДобавлено: 30/07/06 в 23:15       Ответить с цитатойцитата 

Следом ещё пара вопросов icon_smile.gif

1. Может лучше средствами РНР смотреть наличие в тексте переменной нужных кейвордов, а не через базу пропускать? Если "да" - то как?

2. Как недопускать повторения значений для текстов?
Варианты
а) сделать столбец базы уникальным
б) смотреть скриптом через COUNT наличие строки
в) вычислять хеш строки (например md5) и сравнивать по нему пунктом "а" или "б".
Почему-то последний вариант применяется на форумах.

ВОСТОРГ ЗНАЧИТ BMW

0
 

Криптопохуист

С нами с 05.04.03
Сообщения: 17156
Рейтинг: 6019

Ссылка на сообщениеДобавлено: 31/07/06 в 02:35       Ответить с цитатойцитата 

samedi писал:
Вопрос, почему так получается и можно ли избежать после удаления команды OPTIMIZE TABLE tbl?

Это так называемая фрагментация таблицы MyISAM.
Есть два типа таблиц: fixed и dynamic.

Fixed - это таблицы, в которых нет типов полей переменной величины, т.е. varchar, text,blob,binary,set

Dynamic - соотв. наоборот, где есть хоть один тип переменной длинны.

Когда делаешь Delete из таблицы с fixed row lenght, фрагментация не возникает, т.к. на место удаленной записи можно спокойно вставить другую.

Когда же делаешь Delete из таблицы с dynamic length, то на это место мускуль не поставит другой ряд, т.к. неизвесто, влезет он туда или нет (ряд же переменной длинны). По этому на этом месте возникает "дырка". Это фрагментация таблицы, и объем этих "дырок" отображается как "накладные расходы". Лечится "optimize table".

Однако в мускуле где-то с версии 4.0, мускуль сам периодически оптимизирует таблицы, когда к ним долго нет обращения. Так что в прынципе с мускулем 4.x можно по этому поводу не париться.

6
 

Криптопохуист

С нами с 05.04.03
Сообщения: 17156
Рейтинг: 6019

Ссылка на сообщениеДобавлено: 31/07/06 в 02:47       Ответить с цитатойцитата 

samedi писал:
Следом ещё пара вопросов icon_smile.gif
1. Может лучше средствами РНР смотреть наличие в тексте переменной нужных кейвордов, а не через базу пропускать? Если "да" - то как?

дето примерно так
Код:

//$key1,$key2 - два кейворда
//$string - строка для поиска
$k1=preg_quoute($key1,'#');
$k1=preg_replace("[\r\n\t ]+","\\s+",$k1);
$k2=preg_quoute($key2,'#');
$k2=preg_replace("[\r\n\t ]+","\\s+",$k2);
if (preg_match("#{$k1}.+?{$k2}#ism",$string))
{
  есть киворды
}
else
{
  нет кивордов
}


Цитата:
2. Как недопускать повторения значений для текстов?

ИМХО, сделать дополнительное поле со значением md5 и поставить на него UNIQUE.

6
 
Новая тема Новая тема   

Текстовая реклама в форме ответа
Заголовок и до четырех строчек текста
Длина текста до 350 символов
Купить рекламу в этом месте!


Перейти:  



Спонсор раздела Стань спонсором этого раздела!

Реклама на сайте Advertise with us

Опросы

Рецепт новогоднего блюда 2022



Обсудите на форуме обсудить (11)
все опросы »