Модераторы: skyboy, MoLeX, Aliance, ksnk

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> mysql не уменьшается в размере, После удаления строк 
:(
    Опции темы
neoks
Дата 4.8.2011, 11:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 425
Регистрация: 5.7.2010

Репутация: нет
Всего: 1



В таблице было около 300-тыс. записей, и размер базы данных весил 25 метров.
После удаления записей из таблицы осталось всего 3-тыс. записей, но тут я заметил что размер базы данных не изменился о_О.
Также скорость работы осталось прежней что не есть хорошо.

Делаю простой запрос через php.
Код

DELETE FROM db_post WHERE dr=0


Может я не знаю какой та секрет, или просто не правильно написал запрос.
За ранее Спасибо!
PM MAIL   Вверх
neoks
Дата 4.8.2011, 11:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 425
Регистрация: 5.7.2010

Репутация: нет
Всего: 1



О и еше вопрос, по функции  array_merge
Объединяет но не правильно.

Есть два массива с ключами и ключ начинается с цифры 1, после объединения появляется ключик с цифрой 0 который мне не нужен.
Как правильно объединить массивы с ключами, может есть функция или я не правильно написал, пока вижу простой вариант пересчитать все с помощью foreach
PM MAIL   Вверх
CruorVult
Дата 4.8.2011, 11:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 868
Регистрация: 24.9.2008
Где: г.Киев, Украина

Репутация: 9
Всего: 28



Цитата(neoks @  4.8.2011,  11:11 Найти цитируемый пост)
Также скорость работы осталось прежней

Это смотря какие запросы строятся, т.к. величина таблицы может незначительно влиять на скорость выполнения запросов.

Добавлено через 1 минуту и 12 секунд
Цитата(neoks @  4.8.2011,  11:40 Найти цитируемый пост)
Есть два массива с ключами и ключ начинается с цифры 1, после объединения появляется ключик с цифрой 0 который мне не нужен.

привеите примеры массивов и результат после объеденения

Добавлено через 7 минут и 48 секунд
Цитата(neoks @  4.8.2011,  11:11 Найти цитируемый пост)
но тут я заметил что размер базы данных не изменился

можно предварительно сохранить данные, потом сделать 
Код

TRUNCATE TABLE

и потом записать заново
PM MAIL Skype   Вверх
neoks
Дата 4.8.2011, 14:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 425
Регистрация: 5.7.2010

Репутация: нет
Всего: 1



Цитата(CruorVult @  4.8.2011,  11:47 Найти цитируемый пост)
величина таблицы может незначительно влиять на скорость выполнения запросов

Что та я в этом сомневаюсь, если в таблице лимон записей то будет тяжко приходится на mysql, даже от простого запроса WHERE ....

С массивами разобрался, нашол пример там оказалось все просто со знаком +



Цитата(CruorVult @  4.8.2011,  11:47 Найти цитируемый пост)
можно предварительно сохранить данные, потом сделать 
Выделить всёкод SQL
1:
    
TRUNCATE TABLE

и потом записать заново 


Тут я не понял, можно по подробнее объяснить  smile 
PM MAIL   Вверх
Sanchezzz
Дата 4.8.2011, 14:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1670
Регистрация: 19.11.2006
Где: Voronezh

Репутация: 41
Всего: 60



какой двиг используется в таблицы innoDB или другой?
innoDB по умолчанию резервирует место под таблицу и по мере роста таблицы расширяет диапазон.

Цитата

TRUNCATE TABLE `имя таблицы` -- очистить всю таблицу от записей 



--------------------
Понравился ответ "+" по репе, не забываем закрывать тему, заказы в LS.
PM MAIL Skype GTalk   Вверх
neoks
Дата 4.8.2011, 15:03 (ссылка)    | (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 425
Регистрация: 5.7.2010

Репутация: нет
Всего: 1



Цитата(Sanchezzz @  4.8.2011,  14:44 Найти цитируемый пост)
какой двиг используется в таблицы innoDB или другой?

Собственный.

Как я понял TRUNCATE TABLE удаляет все, вообшем чистит таблицу. Я поискал в нете и опробовал, но мне не подходит, мне не просто нужно очистить таблицу, а оставить записи где d_r=1.

Я запросом удаляю все где d_r=0, удаление проходит но размер остается что влияет на скорость.

Теперь думаю, может все записи которые нужно сохранить копировать в временную таблицу, очистить и сново добавить записи.
Но и тут проблема, во первых id - auto_increment и мне кажется что полезут ошибки, а во вторых мне кажется что это будет выполнятся очень долго и ответа не дождусь.
PM MAIL   Вверх
CruorVult
Дата 4.8.2011, 16:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 868
Регистрация: 24.9.2008
Где: г.Киев, Украина

Репутация: 9
Всего: 28



Цитата(neoks @  4.8.2011,  15:03 Найти цитируемый пост)
а во вторых мне кажется что это будет выполнятся очень долго и ответа не дождусь

TRUNCATE  + копирование будет быстрее работать чем удалять сотни тыщ записей

Добавлено через 1 минуту и 19 секунд
Цитата(neoks @  4.8.2011,  14:04 Найти цитируемый пост)
Что та я в этом сомневаюсь, если в таблице лимон записей то будет тяжко приходится на mysql, даже от простого запроса WHERE 

Код

select * from table_name limit 10


будет работать практически одинаково, что с лимоно что с парами тыщ
PM MAIL Skype   Вверх
neoks
Дата 4.8.2011, 16:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 425
Регистрация: 5.7.2010

Репутация: нет
Всего: 1



Такс, не до конца пойму как сделать.

Для примера, есть таблица в которой есть записи с уникальным id - auto_increment это id используется для других таблиц, им нужна знать этот id.

-----------------------
table
-----------------------
id | name       | d_r
-----------------------
1  | url_23     | 0
-----------------------
2  | url_2d_p | 1

Другая таблица curer типа курьера, через нею все пересекается.

-----------------------
curer
-----------------------
id | page_id  | post_id
-----------------------
5  | 1            | 34
-----------------------
8  | 2            | 47

В таблицы curer хранятся id других записей в таблицах. Например когда я обращаюсь к таблице table я заодно обращаюсь к таблице curer где page_id равен id и оттуда вытаскиваю post_id.

Хууу, надеюсь пояснил правильно, так вот, с помощью DELETE все эти id в таблице table остаются то что мне нужно.
Но если использовать TRUNCATE то все удалится и id обновится с 0.


Цитата(CruorVult @  4.8.2011,  16:01 Найти цитируемый пост)
TRUNCATE  + копирование будет быстрее работать чем удалять сотни тыщ записей


А вот теперь по подробнее, я не вникаю как это сделать.

PM MAIL   Вверх
neoks
Дата 5.8.2011, 11:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 425
Регистрация: 5.7.2010

Репутация: нет
Всего: 1



Лан, пойдем другим путем, ктонить знает как скопировать таблицу без записей в новою с другим название.

Я хочу сделать копию таблицы, затем выделить те записи которые должны остаться и циклом while записать в новою, после удалить старую и переименовать новою в старую.

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

Если кто та знает как сделать то подскажите пожалуйста новичку в этом деле.
PM MAIL   Вверх
CruorVult
Дата 5.8.2011, 12:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 868
Регистрация: 24.9.2008
Где: г.Киев, Украина

Репутация: 9
Всего: 28



Код

CREATE TABLE temporary_table_with_deleted SELECT * FROM my_table WHERE d_r=1;
DROP TABLE `my_table`;
RENAME TABLE temporary_table_with_deleted TO my_table;



Это сообщение отредактировал(а) CruorVult - 5.8.2011, 12:26
PM MAIL Skype   Вверх
neoks
Дата 5.8.2011, 12:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 425
Регистрация: 5.7.2010

Репутация: нет
Всего: 1



CruorVult 
Спасибо за ответ, мой вариант уж был огромным, я создавал таблицу затем все переносил со старой на новою, отключал/включал индекс и все удалял.
А тут такой маленький и рабочий, все всем спасибо еще раз, теперь буду спать спокойно, размер базы упал до 2 метров.

Добавлено через 2 минуты и 51 секунду
Опа, а как теперь вернуть индекс таблицы на id.
PM MAIL   Вверх
CruorVult
Дата 5.8.2011, 12:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 868
Регистрация: 24.9.2008
Где: г.Киев, Украина

Репутация: 9
Всего: 28



Код

ALTER TABLE `my_table` ADD PRIMARY KEY ( `id` )


Добавлено через 4 минуты и 23 секунды
ну или не удалять таблицу:
Код

CREATE TABLE temporary_table_with_deleted SELECT * FROM my_table WHERE d_r=1;
TRUNCATE TABLE `my_table`
INSERT INTO `my_table`SELECT * FROM `temporary_table_with_deleted`
DROP TABLE temporary_table_with_deleted ;

PM MAIL Skype   Вверх
neoks
Дата 5.8.2011, 13:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 425
Регистрация: 5.7.2010

Репутация: нет
Всего: 1



Что та не фурычит, как я понял ADD это добавить, но мне не нужна добавлять так как уже есть, просто id не auto_increment.

Добавлено через 6 минут и 46 секунд
Не так не так не создается индекс.
PM MAIL   Вверх
CruorVult
Дата 5.8.2011, 13:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 868
Регистрация: 24.9.2008
Где: г.Киев, Украина

Репутация: 9
Всего: 28



Цитата(neoks @  5.8.2011,  13:01 Найти цитируемый пост)
Не так не так не создается индекс.

ну индекс и не должен создаваться, таблица, я так понял, уже была удалена.

что нужно, автоикремент добавить:
Код

ALTER TABLE `my_table` CHANGE `id` `id` INT(11) AUTO_INCREMENT

PM MAIL Skype   Вверх
neoks
Дата 5.8.2011, 16:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 425
Регистрация: 5.7.2010

Репутация: нет
Всего: 1



Что та не пойму, через SQL работает, но через php выдант ошибку.

Incorrect table definition; there can be only one auto column and it must be defined as a key

Добавлено @ 16:25
O теперь в SQL такайже ошибка #1075 - Incorrect table definition; there can be only one auto column and it must be defined as a key

Добавлено @ 16:29
Кстати всегда интересовал такой вопрос, почему столбец нельзя изменить на AUTO_INCREMENT
Всегда выдает ошибку:

Код

Error

SQL query:

ALTER TABLE `my_table` CHANGE `id` `id` INT( 11 ) NOT NULL DEFAULT '0' AUTO_INCREMENT

MySQL said: Documentation
#1067 - Invalid default value for 'id' 


Только если удалить и заново создать.

Это сообщение отредактировал(а) neoks - 5.8.2011, 16:30
PM MAIL   Вверх
CruorVult
Дата 5.8.2011, 16:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 868
Регистрация: 24.9.2008
Где: г.Киев, Украина

Репутация: 9
Всего: 28



Цитата(neoks @  5.8.2011,  16:22 Найти цитируемый пост)
there can be only one auto column and it must be defined as a key

написано же, что AUTO_INCREMENT может только быть одно поле и причем индексное. Скорее всего вы уже создали AUTO_INCREMENT и пытаетесь сделать это снова.

Посмотрите 
Код

SHOW COLUMNS FROM `my_table`


PM MAIL Skype   Вверх
neoks
Дата 5.8.2011, 16:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 425
Регистрация: 5.7.2010

Репутация: нет
Всего: 1



Сделал.

Код

Field    Type    Null    Key    Default    Extra
id    int(11)    NO        0     
post_id    int(8)    NO        0     
url    varchar(400)    NO             
conect    datetime    NO        0000-00-00 00:00:00     
d_c    int(1)    NO        0     
date    datetime    NO        0000-00-00 00:00:00     
keywords    text    NO        NULL     
description    text    NO        NULL     
title    text    NO        NULL     
d_r    int(1)    NO        0     
m_link    int(1)    NO        0     
g_d_c    int(1)    NO        0     
g_conect    datetime    NO        0000-00-00 00:00:00     
tic    int(1)    NO        0     
pr    int(1)    NO        0     
temp_vs    int(1)    NO        0     
     

Как видно такова поля нет  smile , но почему mysql постоянно ругается когда пытаюсь сделать.

Это сообщение отредактировал(а) neoks - 5.8.2011, 16:50
PM MAIL   Вверх
CruorVult
Дата 5.8.2011, 16:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 868
Регистрация: 24.9.2008
Где: г.Киев, Украина

Репутация: 9
Всего: 28



и где у вас id имеет индекс?
PM MAIL Skype   Вверх
baldina
Дата 5.8.2011, 16:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 26
Всего: 101



Цитата(neoks @  5.8.2011,  16:22 Найти цитируемый пост)

ALTER TABLE `my_table` CHANGE `id` `id` INT( 11 ) NOT NULL DEFAULT '0' AUTO_INCREMENT

у автоматического поля не может быть DEFAULT 
Код

ALTER TABLE `my_table` CHANGE `id` `id` INT( 11 ) NOT NULL AUTO_INCREMENT PRIMARY KEY

или
Код

ALTER TABLE `my_table` CHANGE `id` `id` INT( 11 ) NOT NULL AUTO_INCREMENT

если он уже PRIMARY KEY

Добавлено через 2 минуты и 15 секунд
Цитата(neoks @  4.8.2011,  14:04 Найти цитируемый пост)
Что та я в этом сомневаюсь, если в таблице лимон записей то будет тяжко приходится на mysql, даже от простого запроса WHERE ....

да хоть десять лимонов, если индекс используется. причем на скорость влияет число записей, а не размер файла БД (за исключением ситуаций, когда таблица целиком кешируется в памяти, но в общем случае это редкость)
PM MAIL   Вверх
neoks
Дата 5.8.2011, 17:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 425
Регистрация: 5.7.2010

Репутация: нет
Всего: 1



 smile  для меня mysql еше не изведанное, пока туго разбираюсь, просто я создаю таблицы в мускале и иногда забываю поставить AUTO_INCREMENT.
А когда пытаюсь поставить то муск меня посылает  smile 

Ну вообщем нужна еше подучить, но проблема найти хороший справочник, лан еще раз спасибо за помощь  smile .
PM MAIL   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0955 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.