-- 基本查询 SELECT*FROM sys_user; SELECT id, username, nickname FROM sys_user;
-- WHERE 条件 SELECT*FROM sys_user WHERE status ='0'; SELECT*FROM sys_user WHERE nickname LIKE'%张%'; SELECT*FROM sys_user WHERE id IN (1, 2, 3); SELECT*FROM sys_user WHERE create_time >='2023-01-01';
-- INNER JOIN SELECT u.username, o.order_no, o.amount FROM sys_user u INNERJOIN sys_order o ON u.id = o.user_id;
-- LEFT JOIN(返回所有用户,即使没有订单) SELECT u.username, o.order_no, o.amount FROM sys_user u LEFTJOIN sys_order o ON u.id = o.user_id;
-- 多表联查 SELECT u.username, o.order_no, o.amount FROM sys_user u LEFTJOIN sys_order o ON u.id = o.user_id WHERE u.status ='0' ORDERBY o.create_time DESC LIMIT 20;
五、索引优化
查看索引
1 2 3 4 5
-- 查看表的索引 SHOW INDEX FROM sys_user;
-- 查看查询是否使用索引(EXPLAIN) EXPLAIN SELECT*FROM sys_user WHERE username ='admin';
EXPLAIN 结果解读
列名
说明
好
差
type
访问类型
const, ref, range
ALL(全表扫描)
rows
扫描行数
越小越好
几十万行
Extra
附加信息
Using index
Using filesort
创建索引
1 2 3 4 5 6 7 8 9 10 11
-- 单列索引 CREATE INDEX idx_phone ON sys_user(phone);
-- 联合索引(最左前缀原则) CREATE INDEX idx_status_time ON sys_user(status, create_time);
-- 唯一索引 CREATEUNIQUE INDEX idx_username ON sys_user(username);
-- 删除索引 DROP INDEX idx_phone ON sys_user;
索引使用原则
1 2 3 4 5 6 7 8 9 10
✅ 适合加索引的字段: - WHERE 条件中的字段 - JOIN 关联字段 - ORDER BY 字段 - 数据区分度高的字段
❌ 不适合加索引的字段: - 频繁更新的字段 - 数据重复度高的字段(如 status 只有0/1) - 很少查询的字段