TypechoJoeTheme

至尊技术网

统计
登录
用户名
密码

MySQL查看表索引创建语句与类型详解:从基础到实践

2025-08-29
/
0 评论
/
1 阅读
/
正在检测是否收录...
08/29

一、为什么要查看表索引结构?

在数据库优化过程中,索引是提升查询性能的关键因素。通过分析现有索引的创建语句和类型,我们可以:
- 发现冗余或无效索引
- 验证复合索引字段顺序是否合理
- 检查索引类型是否匹配业务场景
- 为SQL优化提供依据

二、查看索引创建语句的5种方法

方法1:SHOW CREATE TABLE(最常用)

sql SHOW CREATE TABLE employees;
输出示例:
sql CREATE TABLE `employees` ( `emp_no` int NOT NULL, `birth_date` date NOT NULL, `first_name` varchar(14) NOT NULL, `last_name` varchar(16) NOT NULL, `gender` enum('M','F') NOT NULL, `hire_date` date NOT NULL, PRIMARY KEY (`emp_no`), KEY `idx_name` (`last_name`,`first_name`), UNIQUE KEY `idx_hire` (`hire_date`) ) ENGINE=InnoDB

方法2:SHOW INDEX(获取详细信息)

sql SHOW INDEX FROM employees;
输出包含以下关键字段:
- Table: 表名
- Nonunique: 是否唯一索引(0/1) - Keyname: 索引名称
- Seqinindex: 索引中的字段顺序
- Column_name: 字段名
- Collation: 排序方式(A升序/D降序)
- Cardinality: 基数(估算的唯一值数量)

方法3:查询information_schema(适合批量分析)

sql SELECT * FROM information_schema.STATISTICS WHERE TABLE_SCHEMA = 'your_db' AND TABLE_NAME = 'employees';

方法4:使用EXPLAIN分析(验证索引使用情况)

sql EXPLAIN SELECT * FROM employees WHERE last_name = 'Smith';

方法5:mysqldump导出表结构

bash mysqldump -d -u root -p your_db employees > schema.sql

三、MySQL索引类型详解与创建方法

1. 普通索引(INDEX)

最基本的索引类型,没有唯一性约束:sql
-- 创建语法
CREATE INDEX idxname ON employees(lastname);

-- 修改表结构方式
ALTER TABLE employees ADD INDEX idxname (lastname);

2. 唯一索引(UNIQUE INDEX)

保证字段值唯一性:
sql CREATE UNIQUE INDEX idx_email ON employees(email);

3. 主键索引(PRIMARY KEY)

特殊的唯一索引,不允许NULL值:
sql ALTER TABLE employees ADD PRIMARY KEY (emp_no);

4. 全文索引(FULLTEXT)

适用于文本搜索(仅MyISAM/InnoDB支持):
sql ALTER TABLE articles ADD FULLTEXT INDEX idx_content (content);

5. 空间索引(SPATIAL)

用于地理数据(仅MyISAM支持):
sql CREATE SPATIAL INDEX idx_location ON map_data(coordinates);

6. 复合索引(多列索引)

sql -- 字段顺序直接影响查询效率 CREATE INDEX idx_name_dep ON employees(last_name, department);

四、索引优化实战案例

场景:用户表查询缓慢sql
-- 原始表结构
CREATE TABLE users (
id INT AUTOINCREMENT, username VARCHAR(50), mobile CHAR(11), regdate DATETIME,
PRIMARY KEY (id)
);

-- 问题查询
SELECT * FROM users WHERE mobile = '13800138000' ORDER BY reg_date DESC;

优化步骤
1. 分析现有索引
sql SHOW INDEX FROM users; -- 发现只有主键索引

  1. 添加合适索引
    sql ALTER TABLE users ADD UNIQUE INDEX idx_mobile (mobile), ADD INDEX idx_reg_date (reg_date);

  2. 进一步优化(使用覆盖索引)
    sql ALTER TABLE users ADD INDEX idx_mobile_reg (mobile, reg_date);

五、常见问题解答

Q1:如何判断索引是否被使用?sql
-- 查看索引使用统计
SELECT * FROM sys.schemaindexstatistics
WHERE tableschema = 'yourdb';

-- 使用performanceschema SELECT * FROM performanceschema.tableiowaitssummarybyindexusage;

Q2:为什么SHOW CREATE TABLE看不到所有索引?
可能是工具显示限制,建议用SHOW INDEX或查询information_schema获取完整信息。

Q3:如何删除不需要的索引?
sql DROP INDEX idx_name ON table_name; -- 或 ALTER TABLE table_name DROP INDEX idx_name;

通过系统性地分析索引结构和类型,我们可以显著提升数据库查询性能。建议定期使用ANALYZE TABLE更新索引统计信息,确保查询优化器做出正确决策。

索引类型解析MySQL索引查看SHOW INDEXCREATE INDEX语法
朗读
赞(0)
版权属于:

至尊技术网

本文链接:

https://www.zzwws.cn/archives/37065/(转载时请注明本文出处及文章链接)

评论 (0)

人生倒计时

今日已经过去小时
这周已经过去
本月已经过去
今年已经过去个月

最新回复

  1. 强强强
    2025-04-07
  2. jesse
    2025-01-16
  3. sowxkkxwwk
    2024-11-20
  4. zpzscldkea
    2024-11-20
  5. bruvoaaiju
    2024-11-14

标签云