MySQL - Drop Index



The DROP statement in MySQL database is used to remove or delete an existing database object such as a table, index, view, or procedure. Whenever we use DROP statement with any of the database objects, like indexes, it will remove them permanently along with their associated data.

Therefore, we can drop any index from a database table using two different SQL DROP queries.

It is important to understand that dropping an index can have a significant impact on the performance of your database queries. Therefore, only try to remove an index if you are sure that it is no longer required.

The MySQL DROP INDEX Statement

The DROP INDEX statement in MySQL is used to delete an index from a table.

Syntax

Following is the syntax to drop an index using DROP INDEX statement −

DROP INDEX index_name ON table_name;

Example

In this example, we first create a new table CUSTOMERS and adding an index to one of its columns (AGE) using the following CREATE TABLE query −

CREATE TABLE CUSTOMERS (
   ID INT NOT NULL,
   NAME VARCHAR (20) NOT NULL,
   AGE INT NOT NULL,
   ADDRESS CHAR (25),
   SALARY DECIMAL (18, 2),       
   PRIMARY KEY(ID),
   INDEX(AGE)
);

Now, create another index on CUSTOMERS table. We are using CREATE INDEX statement here −

CREATE INDEX NAME_INDEX ON CUSTOMERS (Name);

DROP INDEX Query −

Then, use the following query to drop the index created above.

DROP INDEX NAME_INDEX ON CUSTOMERS;

Verification

To verify if the index has been dropped, display the table definition using DESC query below −

DESC CUSTOMERS;

As we can see in the following table, the index on NAME column is dropped.

Field Type Null Key Default Extra
ID int NO PRI NULL
NAME varchar(20) NO NULL
AGE int NO MUL NULL
ADDRESS char(25) YES NULL
SALARY decimal(18, 2) YES NULL

The MySQL ALTER... DROP Statement

The ALTER DROP statement can also be used to drop an index in a MySQL table. This is just an alternative to the DROP INDEX statement, so it only works with the index that exists on a table.

Syntax

Following is the syntax of the DROP INDEX IF EXISTS in SQL −

ALTER TABLE table_name DROP INDEX index_name;

Example

Let us see another example to drop the index from the CUSTOMERS table using the ALTER... DROP command as shown below −

ALTER TABLE CUSTOMERS DROP INDEX AGE;

Verification

To verify if the index on AGE column has been dropped, display the table definition using DESC query below −

DESC CUSTOMERS;

As we can see in the following table, the index on NAME column is dropped.

Field Type Null Key Default Extra
ID int NO PRI NULL
NAME varchar(20) NO NULL
AGE int NO NULL
ADDRESS char(25) YES NULL
SALARY decimal(18, 2) YES NULL

Dropping PRIMARY KEY or UNIQUE Constraint

The DROP INDEX statement in MySQL does not usually drop indexes like PRIMARY KEY or UNIQUE constraints. To drop indexes associated with these constraints, we need to use the ALTER TABLE DROP command.

Syntax

Following is the syntax −

ALTER TABLE table_name DROP constraint_name;

Example

In this example, we are using the following query to drop the PRIMARY KEY constraint present on the ID column of CUSTOMERS table −

ALTER TABLE CUSTOMERS DROP PRIMARY KEY;

Verification

To verify whether the primary key constraint is dropped from the table, describe the 'temp' table using DESC command as follows −

DESC CUSTOMERS;

The PRIMARY KEY constraint is finally dropped! Look at the table below −

Field Type Null Key Default Extra
ID int NO NULL
NAME varchar(20) NO NULL
AGE int NO NULL
ADDRESS char(25) YES NULL
SALARY decimal(18, 2) YES NULL

Dropping an Index Using a Client Program

We have seen how to drop an index from a MySQL database using SQL queries. In addition to it, we can also use other client programs to perform the drop index operation in the MySQL database.

Syntax

Following are the syntaxes to drop an index from a MySQL database using various programming languages −

The MySQL PHP connector mysqli provides a function named query() to execute the DROP INDEX query in the MySQL database.

$sql = "DROP INDEX index_name ON tbl_name";
$mysqli->query($sql);

The MySQL NodeJS connector mysql2 provides a function named query() to execute the DROP INDEX query in the MySQL database.

sql= "DROP INDEX index_name ON tbl_name";
con.query(sql);

We can use the JDBC type 4 driver to communicate to MySQL using Java. It provides a function named executeUpdate() to execute the DROP INDEX query in the MySQL database.

String sql = "DROP INDEX index_name ON table_name";
statement.executeQuery(sql);

The MySQL Connector/Python provides a function named execute() to execute the DROP INDEX query in the MySQL database.

drop_index_query = "DROP INDEX index_name ON tbl_name"
cursorObj.execute(drop_index_query);

Example

Following are the implementations of this operation in various programming languages −

$dbhost = 'localhost';
$dbuser = 'root';
$dbpass = 'password';
$dbname = 'TUTORIALS';
$mysqli = new mysqli($dbhost, $dbuser, $dbpass, $dbname);
if ($mysqli->connect_errno) {
    printf("Connect failed: %s
", $mysqli->connect_error); exit(); } // printf('Connected successfully.
'); // CREATE INDEX $sql = "DROP INDEX tid ON tutorials_table"; if ($mysqli->query($sql)) { printf("Index droped successfully!.
"); } if ($mysqli->errno) { printf("Index could not be droped!.
", $mysqli->error); } $mysqli->close();

Output

The output obtained is as follows −

Index droped successfully!.
var mysql = require('mysql2');
var con = mysql.createConnection({
    host: "localhost",
    user: "root",
    password: "Nr5a0204@123"
});

  //Connecting to MySQL
  con.connect(function (err) {
  if (err) throw err;
  console.log("Connected!");
  console.log("--------------------------");

  sql = "create database TUTORIALS"
  con.query(sql);

  sql = "USE TUTORIALS"
  con.query(sql);

  sql = "CREATE TABLE temp(ID INT, Name VARCHAR(255), age INT, Location VARCHAR(255));"
  con.query(sql);

  sql = "INSERT INTO temp values(1, 'Radha', 29, 'Vishakhapatnam'),(2, 'Dev', 30, 'Hyderabad');"
  con.query(sql);

  //Creating Indexes
  sql = "CREATE INDEX sample_index ON temp (name) USING BTREE;"
  con.query(sql);

  sql = "CREATE INDEX composite_index on temp (ID, Name);"
  con.query(sql);

  //Displaying Indexes
  sql = "SHOW INDEXES FROM temp;"
  con.query(sql, function(err, result){
    if (err) throw err
    console.log(result);
    console.log("--------------------------");
  });

  //Dropping Indexes
  sql = "DROP INDEX sample_index ON temp;"
  con.query(sql);

  sql = "DROP INDEX composite_index ON temp;"
  con.query(sql);

  //Displaying Indexes after deleting
  sql = "SHOW INDEXES FROM temp;"
  con.query(sql, function(err, result){
    if (err) throw err
    console.log(result);
  });
});

Output

The output produced is as follows −

Connected!
--------------------------
[
  {
    Table: 'temp',
    Non_unique: 1,
    Key_name: 'sample_index',
    Seq_in_index: 1,
    Column_name: 'Name',
    Collation: 'A',
    Cardinality: 2,
    Sub_part: null,
    Packed: null,
    Null: 'YES',
    Index_type: 'BTREE',
    Comment: '',
    Index_comment: '',
    Visible: 'YES',
    Expression: null
  },
  {
    Table: 'temp',
    Non_unique: 1,
    Key_name: 'composite_index',
    Seq_in_index: 1,
    Column_name: 'ID',
    Collation: 'A',
    Cardinality: 2,
    Sub_part: null,
    Packed: null,
    Null: 'YES',
    Index_type: 'BTREE',
    Comment: '',
    Index_comment: '',
    Visible: 'YES',
    Expression: null
  },
  {
    Table: 'temp',
    Non_unique: 1,
    Key_name: 'composite_index',
    Seq_in_index: 2,
    Column_name: 'Name',
    Collation: 'A',
    Cardinality: 2,
    Sub_part: null,
    Packed: null,
    Null: 'YES',
    Index_type: 'BTREE',
    Comment: '',
    Index_comment: '',
    Visible: 'YES',
    Expression: null
  }
]
--------------------------
[]
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;

public class DropIndex {
   public static void main(String[] args) {
      String url = "jdbc:mysql://localhost:3306/TUTORIALS";
      String username = "root";
      String password = "password";
      try {
         Class.forName("com.mysql.cj.jdbc.Driver");
         Connection connection = DriverManager.getConnection(url, username, password);
         Statement statement = connection.createStatement();
         System.out.println("Connected successfully...!");

         //Drop index;
         String sql = "DROP INDEX tid ON tutorials_tbl";
         statement.executeUpdate(sql);
         System.out.println("Index has been dropped Successfully...!");
         connection.close();
      } catch (Exception e) {
         System.out.println(e);
      }
   }
}

Output

The output obtained is as shown below −

Connected successfully...!
Index has been dropped Successfully...!
import mysql.connector
#establishing the connection
connection = mysql.connector.connect(
    host='localhost',
    user='root',
    password='password',
    database='tut'
)
cursorObj = connection.cursor()
drop_index_query = "DROP INDEX idx_submission_date ON tutorials_tbl"
cursorObj.execute(drop_index_query)
connection.commit()
print("Index dropped successfully.")
cursorObj.close()
connection.close()

Output

Following is the output of the above code −

Index dropped successfully.
Advertisements