PDA

View Full Version : حذف ایندکس های دیتابیس SQLite



tehro0n
جمعه 24 خرداد 1392, 10:00 صبح
سلام، با توجه به تست هایی که با SQLite انجام دادم پس از delete کردن اطلاعات ایندکس در فایل باقی می مونه و در نتیجه حجم قابل توجهی از اطلاعات پاک نمیشه..
برای مثال دیتا فایلی دارم که از 130 مگ بیشتر شده و چون نیاز به اطلاعات اولیه نداشتم آن ها را حذف کردم اما باز هم حجم همان مقدار باقی ماند و ایندکس ها پاک نشدند
چه کنیم؟ دستوری هست که بشه ایندکس ها رو هم پاک کرد، به غیر از drop که کل اطلاعاته!

Unique
جمعه 24 خرداد 1392, 23:14 عصر
باید VACUUM کنی ، میتونی از این اسکریپت php (http://www.mediawiki.org/wiki/Manual:Sqlite.php) استفاده کنی.

tehro0n
جمعه 31 خرداد 1392, 11:34 صبح
باید VACUUM کنی ، میتونی از این اسکریپت php (http://www.mediawiki.org/wiki/Manual:Sqlite.php) استفاده کنی.

متوجه نشدم دقیقا چیکار باید بکنم! تنظیماتی در php.ini رو باید دستکاری کرد؟ auto_vacuum=FULL رو کجا باید بنویسم! این نمونه کد php که زده رو نمی فهمم! بعد از دستور delete چیزی باید وارد کرد؟ من به صورت زیر اطلاعات رو حذف می کنم



$delete = "DELETE FROM `hits` WHERE `id` < 2000";
// Execute statement
$file_db->exec($delete);

Unique
جمعه 31 خرداد 1392, 22:13 عصر
ببین من معمولا ازش روی خود db استفاده میکنم اینطوری :

sqlite3 my.db "VACUUM;"

اما با query هم میشه ، اینطوری :

"VACUUM table_or_index;"

tehro0n
جمعه 07 تیر 1392, 11:51 صبح
خیلی هم خوب..
فقط در توضیحات این را نفهمیدم که اگه این دستور رو بزنیم آیا کل ایندکس ها پاک میشه (چون شرطی نمیشه توش گذاشت) یا اون دسته از ایندکس هایی که فیلدهای اصلیشون پاک شده فقط حذف میشن و باقی ایندکس ها باقی می مونن؟

MMSHFE
جمعه 07 تیر 1392, 11:57 صبح
VACUUM دوباره ساختار دیتابیس رو بازسازی میکنه و ایندکسهای ضروری (مربوط به رکوردهایی که حذف نشدن)، از بین نمیرن. البته از VACUUM باید کمی با احتیاط و آگاهی استفاده کنید چون ممکنه ROWID جدولهایی که کلید اصلی عددی ندارن رو تغییر بده. منبع: http://sqlite.org/lang_vacuum.html