在 MySQL 中,可以在建表语句中使用主键索引、唯一索引和普通索引来定义表的索引
主键索引: 主键索引用于唯一标识表中的每一行数据,通常用于加速根据主键值进行数据检索的操作。在建表时,可以通过 PRIMARY KEY
关键字定义主键索引。主键索引在一张表中只能有一个。
CREATE TABLE employees (id INT AUTO_INCREMENT PRIMARY KEY,name VARCHAR(50),age INT,email VARCHAR(100)
);SHOW CREATE TABLE employees;CREATE TABLE `employees` (`id` int NOT NULL AUTO_INCREMENT,`name` varchar(50) DEFAULT NULL,`age` int DEFAULT NULL,`email` varchar(100) DEFAULT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
唯一索引: 唯一索引用于确保表中某一列(或多列)的值唯一,可以加速根据唯一值进行数据检索的操作。在建表时,可以通过 UNIQUE
关键字定义唯一索引。
CREATE TABLE products (product_id INT PRIMARY KEY,product_name VARCHAR(100) UNIQUE,price DECIMAL(10, 2),category VARCHAR(50)
);SHOW CREATE TABLE products;CREATE TABLE `products` (`product_id` int NOT NULL,`product_name` varchar(100) DEFAULT NULL,`price` decimal(10,2) DEFAULT NULL,`category` varchar(50) DEFAULT NULL,PRIMARY KEY (`product_id`),UNIQUE KEY `product_name` (`product_name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
普通索引: 普通索引是最常见的索引类型,用于加速根据索引列的值进行数据检索的操作。在建表时,可以通过 INDEX
关键字定义普通索引。
CREATE TABLE orders (order_id INT PRIMARY KEY,customer_id INT,order_date DATE,INDEX idx_customer_id (customer_id),INDEX idx_order_date (order_date)
);SHOW CREATE TABLE orders;CREATE TABLE `orders` (`order_id` int NOT NULL,`customer_id` int DEFAULT NULL,`order_date` date DEFAULT NULL,PRIMARY KEY (`order_id`),KEY `idx_customer_id` (`customer_id`),KEY `idx_order_date` (`order_date`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
在上述例子中,employees
表使用了主键索引 PRIMARY KEY
,products
表使用了唯一索引 UNIQUE
,orders
表使用了普通索引 INDEX
。根据具体的查询需求和表的设计,可以选择合适的索引类型来优化查询性能。需要注意的是,索引的创建和维护会增加写入操作的开销,因此在选择索引时需谨慎,避免过度创建不必要的索引。