MySQL - 刪除索引



MySQL 資料庫中的DROP語句用於刪除或移除現有的資料庫物件,例如表、索引、檢視或過程。無論何時使用DROP語句以及任何資料庫物件(如索引),它都將永久刪除它們及其關聯的資料。

因此,我們可以使用兩種不同的SQL DROP查詢從資料庫表中刪除任何索引。

重要的是要理解,刪除索引可能會對資料庫查詢的效能產生重大影響。因此,只有在確定不再需要索引時才嘗試刪除它。

MySQL DROP INDEX 語句

MySQL 中的 DROP INDEX 語句用於從表中刪除索引。

語法

以下是使用 DROP INDEX 語句刪除索引的語法:

DROP INDEX index_name ON table_name;

示例

在這個例子中,我們首先建立一個新的表CUSTOMERS,並使用以下 CREATE TABLE 查詢向其中一列 (AGE) 新增索引:

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)
);

現在,在CUSTOMERS表上建立另一個索引。我們在這裡使用 CREATE INDEX 語句:

CREATE INDEX NAME_INDEX ON CUSTOMERS (Name);

DROP INDEX 查詢:

然後,使用以下查詢刪除上面建立的索引。

DROP INDEX NAME_INDEX ON CUSTOMERS;

驗證

要驗證索引是否已刪除,請使用下面的 DESC 查詢顯示錶定義:

DESC CUSTOMERS;

正如我們在下表中看到的,NAME 列上的索引已被刪除。

欄位 型別 Null 預設值 額外
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

MySQL ALTER...DROP 語句

ALTER DROP 語句也可用於在 MySQL 表中刪除索引。這只是 DROP INDEX 語句的替代方法,因此它僅適用於表上存在的索引。

語法

以下是 SQL 中 DROP INDEX IF EXISTS 的語法:

ALTER TABLE table_name DROP INDEX index_name;

示例

讓我們再看一個例子,使用 ALTER...DROP 命令從 CUSTOMERS 表中刪除索引,如下所示:

ALTER TABLE CUSTOMERS DROP INDEX AGE;

驗證

要驗證 AGE 列上的索引是否已刪除,請使用下面的 DESC 查詢顯示錶定義:

DESC CUSTOMERS;

正如我們在下表中看到的,NAME 列上的索引已被刪除。

欄位 型別 Null 預設值 額外
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

刪除 PRIMARY KEY 或 UNIQUE 約束

MySQL 中的 DROP INDEX 語句通常不會刪除諸如 PRIMARY KEY 或 UNIQUE 約束之類的索引。要刪除與這些約束關聯的索引,我們需要使用ALTER TABLE DROP命令。

語法

以下是語法:

ALTER TABLE table_name DROP constraint_name;

示例

在這個例子中,我們使用以下查詢刪除 CUSTOMERS 表的 ID 列上存在的 PRIMARY KEY 約束:

ALTER TABLE CUSTOMERS DROP PRIMARY KEY;

驗證

要驗證主鍵約束是否已從表中刪除,請使用 DESC 命令描述 'temp' 表,如下所示:

DESC CUSTOMERS;

PRIMARY KEY 約束最終被刪除了!請看下錶:

欄位 型別 Null 預設值 額外
ID int NO NULL
NAME varchar(20) NO NULL
AGE int NO NULL
ADDRESS char(25) YES NULL
SALARY decimal(18, 2) YES NULL

使用客戶端程式刪除索引

我們已經瞭解瞭如何使用 SQL 查詢從 MySQL 資料庫中刪除索引。除此之外,我們還可以使用其他客戶端程式在 MySQL 資料庫中執行刪除索引操作。

語法

以下是使用各種程式語言從 MySQL 資料庫中刪除索引的語法:

MySQL PHP 聯結器mysqli提供了一個名為query()的函式來在MySQL資料庫中執行DROP INDEX查詢。

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

MySQL NodeJS 聯結器mysql2提供了一個名為query()的函式來在MySQL資料庫中執行DROP INDEX查詢。

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

我們可以使用JDBC 型別 4驅動程式透過Java與MySQL進行通訊。它提供了一個名為executeUpdate()的函式來在MySQL資料庫中執行DROP INDEX查詢。

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

MySQL Connector/Python 提供名為 execute() 的函式來執行 MySQL 資料庫中的 DROP INDEX 查詢。

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

示例

以下是此操作在各種程式語言中的實現:

$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();

輸出

獲得的輸出如下:

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);
  });
});

輸出

生成的輸出如下:

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://: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);
      }
   }
}

輸出

獲得的輸出如下所示:

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()

輸出

以下是上述程式碼的輸出:

Index dropped successfully.
廣告