Introduction to MySQL Index Types
The following article provides an outline for MySQL index types. MySQL Index is a type of database structure which is responsible to progress the speed of table operations. In MySQL, the Indexes can be formed by using one or many columns, which provides the base for both speedy casual lookups and proficient assembling of access to records. Indexes are essentially used in the server database tables to swiftly find the table rows having specific values of the table column. If there is an absence of an index in the table, then MySQL needs to scan the entire table to locate and check the appropriate table rows.
This may cause the searching process much slower when the table is big, and data are large. Therefore, MySQL Indexes and their various types help to create, remove, search and fetch a list of records scanning the particular values available in the table data. A user cannot view the indexes as indexes are beneficial only to prompt up the SQL queries and implemented by the Database Search Engine to localize records very speedily.
Different Types of Index in MySQL
While building up an index, a user should take into deliberation which all table columns will be implemented to write SQL queries having WHERE clause swiftly and form one or multiple indexes on those table columns.
The statements such as INSERT and UPDATE consumes more time on tables with indexes. On the other hand, the statement SELECT performs faster on those tables because, during the insert or update query execution, the server also performs to insert or update related index values too. Also, optimizes query such as ORDER BY and GROUP BY with Constraints and MAX(), MIN().
In MySQL, we have three different methods for creating indexes:
a. Using keyword CREATE INDEX.
CREATE INDEX Indexname ON Tablename (indexcolumn1, indexcolumn2, ….);
b. Using keyword CREATE TABLE to create a table.
CREATE TABLE Tablename (column1 CHAR (30) NOT NULL, INDEX (column2));
c. Using keyword ALTER TABLE.
ALTER TABLE Tablename ADD INDEX (column1, column2);
Now, let us see the types of MySQL Indexes where each one of all 6 types server for diverse purposes:
Unique is a type of MySQL Index which specifies that all values of the tables columns, when implemented, have to be distinct. There can be no duplicate values in the column which is indexed existing in a single column unique index. Whereas in a multi-column unique index, columns values can be replicated in a single table column, but the grouping of column values in every row should be unique. Hence, this Unique index is useful to avoid the duplicity of values in the columns, and generally, we define the MySQL Index after we have created the table.
CREATE UNIQUE INDEX Indexname ON Tablename(indexcolumn1, indexcolumn2,…);
CREATE TABLE Tablename(Column1 CHAR (30) NOT NULL, UNIQUE INDEX (column2));
ALTER TABLE Tablename ADD UNIQUE INDEX (column1, column2);
2. Primary Key
Primary Key is a type of Unique Index which specifies that the column mentioned as Primary key must contain no NULL value. Each table row should have a value for the table column or group of columns. Due to this, we need to normally define a primary index on the lowest number of columns as possible, and mostly, the primary key is set on a single column. Once the column values are set in, the primary key cannot be modified.
Let us view the query below to create the index – primary key:
CREATE TABLE Tablename (Columnname Data_type PRIMARY KEY );
CREATE TABLE Tablename (Column1 CHAR(30) NOT NULL, Column2 CHAR(30) NOT NULL, PRIMARY KEY (Column1, Column2));
ALTER TABLE Tablename ADD PRIMARY KEY(Column1, Column2);
3. Simple | Regular | Normal
In this type of Index named as simple, regular or normal, the specified column values do not require to be unique and as well as can be NULL also. They are supplemented basically to aid the database searching process for records quicker.
Find the query code below to create the simple, regular and normal type of index:
CREATE INDEX Indexname ON Tablename (Indexcolumn1, Indexcolumn2, …);
CREATE TABLE Tablename(Column1 CHAR(30) NOT NULL, INDEX(Column2));
ALTER TABLE Tablename ADD INDEX(Column1, Column2);
This type of index is implemented for full-text searches as the name itself implies it. Occasionally, suppose you need to find the blob of text which includes a certain word or combination of words, or it can even be a substring found within the higher block text, then this full-text index plays a vital role and, therefore, broadly implemented in search engines and e-commerce. But this indexes are maintained only for MyISAM and InnoDB tables in the database and can consist of only VARCHAR, CHAR, and TEXT table columns.
Find the query below to create a Full-text index in MySQL:
CREATE FULLTEXT INDEX Indexname ON Tablename(indexcolumn1, indexcolumn2, …);
CREATE TABLE Tablename (column1 TEXT, FULLTEXT(column1));
ALTER TABLE Tablename ADD FULLTEXT(column1, column2);
The Spatial indexes are a new index type in MySQL and not broadly used. MySQL allows to create Spatial indexes on geometry-valued columns with NOT NULL constraint. The spatial index creates an R-tree index. The engine builds up a B-tree index for storage engines that maintain nonspatial indexing of the spatial table columns. This B-tree index applied on spatial values provides benefits for precise value lookups, however not for the range scans. The optimizer may apply spatial indexes stated on columns which are SRID-restricted.
Below is the code to query the Spatial Index:
CREATE INDEX Indexname ON Tablename(Indexcolumn1);
CREATE TABLE Tablename (column1 GEOMETRY NOT NULL SRID 4326,SPATIAL INDEX(Column2));
ALTER TABLE Tablename ADD SPATIAL INDEX (column1, column2);
This Descending index is a consistent index stored in the inverse order and is available only version 8+ of MySQL. It is supportive when a user run queries to find out the most newly added data, such as you may want to view the six newest posts or the five most current comments on all the posts. Scanning the indexes in inverse order previously have caused a performance issue. It will be more resourceful to use the descending index in onward order. This descending index also makes it likely for the optimizer to apply multiple table column indexes, and this is done when the most effectual scan order fusions ascending order for few table columns and descending order for few others.
View the following query to create Descending index:
CREATE INDEX Indexname ON Tablename (Indexcolumn1 DESC);
CREATE TABLE Tablename (Column1 INT, Column2 INT, INDEX asc_index1(Column1 ASC, Column2 ASC), INDEX desc_index1 (Column1 DESC, Column2 DESC));
ALTER TABLE Tablename ADD INDEX(column1 DESC, column2 ASC);
A MySQL Index is a technique for tuning the performance for quicker retrieval of data records. In the table, an index makes an insert for every value, which displays in the indexed table column. Indexes are important for the table operations also. MySQL Indexes practically can be said to be tables that store the Index field or, Primary key and a pointer to every record rows into the authentic table.
This is a guide to MySQL Index Types. Here we discuss the introduction and different types of index in MySQL, respectively. You may also have a look at the following articles to learn more –