MySQL 5.6-এর নিচের ভার্সনে ফাংশন-বেইসড ইন্ডেক্স সম্ভব ছিল না। ফাংশন-বেইসড ইন্ডেক্স তৈরি করতে প্রথমে একটি টেবিল তৈরি করুন।
mysql> CREATE TABLE FunctionIndexDemo -> ( -> FirstName varchar(100) -> ); Query OK, 0 rows affected (0.70 sec)
ফাংশন-বেইসড ইন্ডেক্স সিনট্যাক্স (Prefix Index)
CREATE INDEX index_name ON yourTableName (column_name(IntegerSize));
প্রয়োগ (FirstName কলামের প্রথম ৬ ক্যারেক্টারে ইন্ডেক্স):
mysql> CREATE INDEX indFirstName ON FunctionIndexDemo (FirstName(6)); Query OK, 0 rows affected (0.56 sec) Records: 0 Duplicates: 0 Warnings: 0
ইন্ডেক্স আছে কিনা চেক করুন:
mysql> SHOW INDEX FROM FunctionIndexDemo;
আউটপুট (Sub_part: 6 দেখাচ্ছে প্রিফিক্স লেন্থ):
+-------------------+------------+--------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+ | Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment | Visible | +-------------------+------------+--------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+ | functionindexdemo | 1 | indFirstName | 1 | FirstName | A | 0 | 6 | NULL | YES | BTREE | | | YES | +-------------------+------------+--------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+ 1 row in set (0.24 sec)
গুরুত্বপূর্ণ আপডেট (MySQL 8.0.13+): এখন সত্যিকারের ফাংশন-বেইসড ইন্ডেক্স (Functional Index) INDEX ((LOWER(email))) বা INDEX ((CAST(json_col->>'$.name' AS CHAR(50)))) সিনট্যাক্সে তৈরি করা যায়। প্রিফিক্স ইন্ডেক্স (col(10)) ফাংশন-বেইসড ইন্ডেক্স নয়, এটি কলামের শুরুতে নির্দিষ্ট দৈর্ঘ্যের ইন্ডেক্স।