Mysql 简明教程
MySQL - Non-Clustered Index
MySQL 中的索引用于从数据库表或视图中更快地检索数据。用户无法在应用程序级别看到索引,但它们在幕后工作以加快搜索和查询。
MySQL 中有两种类型的索引 -
-
Clustered Index
-
Non-Clustered Index
MySQL 中的聚集索引可以按照创建所需的键列对表格中的所有行进行排序,从而手动对表格中的数据进行排序。另一方面,非聚集索引将数据存储在一个位置,索引及该数据的指针存储在另一个位置。
MySQL Non-Clustered Indexes
非聚集索引将数据存储在一个位置,将索引存储在另一个位置。这些索引包含对实际数据的指针。
然而,MySQL 并未提供明确创建聚集和非聚集索引的方法。主键被视为聚集索引。未定义主键时,第一个 UNIQUE NOT NULL 键即为聚集索引。表上的其他索引均为非聚集索引。
Example
我们通过一个示例来看看如何在名为“Students”的表上创建非聚集索引。此表包含学生的详细信息,如学号、姓名、年龄和系别。我们尝试对学号和系别列应用非聚集索引,查询如下——
首先使用下面所示的 CREATE TABLE 语句创建学生表——
CREATE TABLE CUSTOMERS(
ID INT NOT NULL,
NAME VARCHAR (20) NOT NULL,
AGE INT NOT NULL,
ADDRESS CHAR (25),
SALARY DECIMAL (20, 2),
PRIMARY KEY(ID)
);
使用以下查询在 NAME 列上创建非聚集索引——
CREATE INDEX nc_index ON CUSTOMERS(NAME);
Note - 由于 MySQL 没有非聚集索引的具体规定,我们使用了常规的 CREATE INDEX 语句。
Creating a Non-Clustered Index Using NodeJS
除了使用 SQL 查询之外,我们还可以使用客户端程序创建非聚集索引。
MySQL NodJS 连接器 mysql2 提供了一个名为 query() 的函数,用于执行 MySQL 数据库中的 CREATE INDEX 查询。
Syntax
以下是使用 NodeJS 在 MySQL 数据库中创建非聚集索引的语法——
sql = "CREATE INDEX index_name ON table_name(column_name(s))";
con.query(sql);
Example
以下是使用 NodeJS 实现此操作——
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("--------------------------");
//Creating a Database
sql = "create database TUTORIALS"
con.query(sql);
//Select database
sql = "USE TUTORIALS"
con.query(sql);
//Creating table
sql = "CREATE TABLE STUDENTS(RNO INT NOT NULL,NAME VARCHAR(50),AGE INT,DEPT VARCHAR(50));"
con.query(sql);
//Creating Index
sql = "CREATE INDEX nc_index ON STUDENTS(RNO, DEPT);"
con.query(sql);
//Describing the Table
sql = "DESC STUDENTS;"
con.query(sql, function(err, result){
if (err) throw err
console.log(result)
});
});
Output
输出结果如下:
Connected!
--------------------------
[
{Field: 'RNO',Type: 'int',Null: 'NO',Key: 'MUL',Default: null,Extra: ''},
{Field: 'NAME',Type: 'varchar(50)',Null: 'YES',Key: '',Default: null,Extra: ''},
{Field: 'AGE',Type: 'int',Null: 'YES',Key: '',Default: null,Extra: ''},
{Field: 'DEPT',Type: 'varchar(50)',Null: 'YES',Key: '',Default: null,Extra: ''}
]