উত্তর:
@ মিচওয়েটের উত্তরে সম্প্রসারিত করতে (সরাসরি সরাসরি উত্তর দেওয়ার জন্য +1):
আনলাইজ টেবিল কী বিতরণ পরীক্ষা করে এবং সেগুলি INFORMATION_SCHEMA.STATISTICS এ সঞ্চয় করে।
নিখুত টেবিল সঞ্চালিত টেবিল বিশ্লেষণ কিছু টেবিল কম্প্রেশন করছেন পরে। OPTIMIZE TABLE mydb.mytable;
টেবিলটি মাইআইএসএএম এরসমতুল্যহ'ল:
ALTER TABLE mydb.mytable ENGINE=MyISAM;
ANALYZE TABLE mydb.mytable;
ডেটাডির মাইআইএসএএম টেবিলের জন্য mydb.mytable /var/lib/mysql
, আপনার কাছে নিম্নলিখিত ফাইলগুলি রয়েছে:
/var/lib/mysql/mydb/mytable.frm
/var/lib/mysql/mydb/mytable.MYD
(তথ্য)/var/lib/mysql/mydb/mytable.MYI
(ইনডেক্স)OPTIMIZE TABLE mydb.mytable
টেবিলের জন্য .MYD
এবং .MYI
ফাইলগুলি সঙ্কুচিত করবে ।
এটি ইনোডিবি-র ক্ষেত্রে এক নয়। এখানে এটি কীভাবে আলাদা:
প্রতিটি টেবিলের ডেটা এবং সূচীগুলি একটি বাহ্যিক টেবিল স্পেস ফাইলে সংরক্ষণ করা হয়। জন্য datadir
হয় /var/lib/mysql
এবং টেবিল mydb.mytable
, এটা নিম্নরূপে সংরক্ষণ করা হবে:
/var/lib/mysql/mydb/mytable.frm
/var/lib/mysql/mydb/mytable.ibd
যখন OPTIMIZE TABLE mydb.mytable
মৃত্যুদন্ড কার্যকর করা হয়, mytable.ibd
সঙ্কুচিত হয়।
কেবলই /var/lib/mysql/mydb/mytable.frm
থাকত। টেবিলের জন্য সমস্ত ডেটা এবং সূচী পৃষ্ঠাগুলি mydb.mytable
সিস্টেম টেবিল স্পেস ফাইলে সংরক্ষণ করা হয় /var/lib/mysql/ibdata1
।
কখন OPTIMIZE TABLE mydb.mytable
মৃত্যুদন্ড কার্যকর করা হয়, তখন ডেটা এবং সূচী পৃষ্ঠাগুলি স্বতঃস্ফূর্তভাবে ইবদাটা 1 তে লেখা হয়। দুর্ভাগ্যক্রমে, এটি আইবডাটা 1 লাফিয়ে ও সীমানায় বেড়ে যায়।
পারকোনা সিটিও ভাদিম তাকাচেনকো থেকে চিত্রগত উপস্থাপনা দেখুন
আপনি মন্তব্য ছিল
আমি মনে করি, ইনোডাবের জন্য টেবিলটি অনুকূলিতকরণ সমর্থন করে না। আমি একটি বার্তা পেয়েছি, সূচি আবার তৈরি করা হবে। এটা কিভাবে কাজ করে?
আমি এটি চেষ্টা করেছিলাম
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.5.29 MySQL Community Server (GPL)
Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> use test
Database changed
mysql> create table dat (a int, primary key (a));
Query OK, 0 rows affected (0.08 sec)
mysql> insert into dat values (1),(2),(3),(4),(5),(6),(7),(8),(9),(10);
Query OK, 10 rows affected (0.04 sec)
Records: 10 Duplicates: 0 Warnings: 0
mysql> analyze table dat;
+----------+---------+----------+----------+
| Table | Op | Msg_type | Msg_text |
+----------+---------+----------+----------+
| test.dat | analyze | status | OK |
+----------+---------+----------+----------+
1 row in set (0.06 sec)
mysql> optimize table dat;
+----------+----------+----------+-------------------------------------------------------------------+
| Table | Op | Msg_type | Msg_text |
+----------+----------+----------+-------------------------------------------------------------------+
| test.dat | optimize | note | Table does not support optimize, doing recreate + analyze instead |
| test.dat | optimize | status | OK |
+----------+----------+----------+-------------------------------------------------------------------+
2 rows in set (0.14 sec)
mysql>
আপনি সঠিক. আপনি OPTIMIZE TABLE
একক অপারেশন হিসাবে চালাতে পারবেন না । পরিবর্তে ইনোডিবি যা করে তা হ'ল:
ALTER TABLE mydb.mytable ENGINE=InnoDB;
ANALYZE TABLE mydb.mytable;
আপনি নিজেই এই পদক্ষেপগুলি চালাতে পারেন।
যাইহোক, সমস্ত সততার সাথে, আপনাকে ANALYZE TABLE
কোনও ইনোডিবি টেবিলের বিরুদ্ধে চালানো উচিত নয় কারণ প্রতিবার কোনও ক্যুরিয়র কার্যকর করা হলে, ইনোডিবি স্টোরেজ ইঞ্জিন সূচীর পৃষ্ঠাগুলিতে পাসের উপর ভিত্তি করে টেবিল কার্ডিনালিটির উপর একটি অনুমান করে। যদি একটি উচ্চ নম্বর আছে INSERTs
, UPDATEs
এবং DELETEs
, তাহলে আপনি প্রয়োজন হবে ANALYZE TABLE
। যখন একটি উচ্চ সংখ্যা আছে DELETEs
, তখনALTER TABLE mydb.mytable ENGINE=InnoDB;
টেবিলটি সঙ্কুচিত করা প্রয়োজন।
আমি আসলে ANALYZE TABLE
নির্দিষ্ট কিছু ক্ষেত্রে ইনোডিবি-এর নিরর্থকতা সম্পর্কে পোস্ট লিখেছিলাম :
OPTIMIZE TABLE
"। আপনি যখন OPTIMIZE TABLE
ইনোডিবি টেবিলের জন্য থাকেন, তখন মাইএসকিউএল আপনার জন্য ক্রিয়াকলাপ সম্পাদন করে ALTER TABLE ... ENGINE=InnoDB
এবং ANALYZE TABLE ...
যখন এতে বলা হয় "এর পরিবর্তে পুনরায় তৈরি করুন + টেবিল বিশ্লেষণ করুন" says
OPTIMIZE TABLE dat;
মাইএসকিউএল 5.5.29 এ দৌড়েছি এবং এটি অবিলম্বে অভিযোগ করেছে Table does not support optimize, doing recreate + analyze instead
,। এজন্যই আমি সুপারিশ করছি ALTER TABLE dat ENGINE=InnoDB; ANALYZE TABLE dat;
।
OPTIMIZE TABLE
ইনোডিবিতে থাকবেন তখন সার্ভারটি আসলে প্রতিক্রিয়া ফিরিয়ে দেওয়ার আগে বাস্তবে সম্পাদন করে ALTER TABLE ... ENGINE=InnoDB
এবং ANALYZE TABLE
পর্দার আড়ালে করে ... যাতে আপনি প্রকৃতপক্ষে OPTIMIZE TABLE
ইনোডিবি তে চালাতে পারেন , এবং অভিযুক্ত প্রভাব অর্জন করতে পারেন ।
আপনার মাইএসকিউএল এবং স্টোরেজ ইঞ্জিনের সংস্করণে নির্ভর করে তবে সাধারণভাবে:
টেবিলটি অপ্টিমাইজ করুন টেবিলটি বিশ্লেষণ করে, কোনও টেবিলের জন্য কী বিতরণ সংরক্ষণ করে, অব্যবহৃত স্থানটি পুনরায় দাবি করে এবং ডেটা ফাইলটিকে ডিফ্রিমেন্ট করে।
বিশ্লেষণ সারণী কেবল সারণী বিশ্লেষণ করে কী বিতরণ সংরক্ষণ করে।