1. MySQL索引基础与语法详解
作为一名长期与MySQL打交道的后端开发者,我深刻体会到索引对数据库性能的关键影响。索引就像书籍的目录,能让我们快速定位到需要的数据,而不用逐页翻阅整本书。但索引的使用绝非简单创建就完事,其中有许多值得注意的细节和技巧。
1.1 索引创建的五种姿势
在实际项目中,我们会遇到各种创建索引的场景,每种方式都有其适用情况:
sql复制-- 基础单列索引(最常用)
CREATE INDEX idx_user_name ON users(username);
-- 唯一索引(确保数据唯一性)
CREATE UNIQUE INDEX idx_user_email ON users(email);
-- 复合索引(多条件查询优化)
CREATE INDEX idx_name_age ON employees(last_name, age);
-- 建表时定义索引(DDL最佳实践)
CREATE TABLE products (
id INT PRIMARY KEY,
name VARCHAR(100),
price DECIMAL(10,2),
category VARCHAR(50),
INDEX idx_category (category), -- 普通索引
UNIQUE INDEX idx_product_name (name) -- 唯一索引
);
-- 后期添加索引(生产环境常用)
ALTER TABLE orders ADD INDEX idx_order_date (order_date);
ALTER TABLE customers ADD UNIQUE INDEX idx_phone (phone_number);
经验之谈:生产环境建议使用ALTER TABLE而非CREATE INDEX,因为前者在表锁处理上更友好,对大表操作时影响更小。
1.2 索引查看与删除
了解索引状态和清理无用索引同样重要:
sql复制-- 查看表的所有索引(含隐藏信息)
SHOW INDEX FROM employees;
-- 删除普通索引
DROP INDEX idx_name_age ON employees;
--
