С нами с 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?
|
|
|
|
С нами с 21.06.05
Сообщения: 1788
Рейтинг: 1579
|
Добавлено: 30/07/06 в 23:15 |
Следом ещё пара вопросов
1. Может лучше средствами РНР смотреть наличие в тексте переменной нужных кейвордов, а не через базу пропускать? Если "да" - то как?
2. Как недопускать повторения значений для текстов?
Варианты
а) сделать столбец базы уникальным
б) смотреть скриптом через COUNT наличие строки
в) вычислять хеш строки (например md5) и сравнивать по нему пунктом "а" или "б".
Почему-то последний вариант применяется на форумах.
|
|
|
|
Криптопохуист
С нами с 05.04.03
Сообщения: 17158
Рейтинг: 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 можно по этому поводу не париться.
|
|
|
|
Криптопохуист
С нами с 05.04.03
Сообщения: 17158
Рейтинг: 6019
|
Добавлено: 31/07/06 в 02:47 |
samedi писал: | Следом ещё пара вопросов
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.
|
|
|
|
Текстовая реклама в форме ответа Заголовок и до четырех строчек текста Длина текста до 350 символов Купить рекламу в этом месте! |