sql查询优化讲解
工具/原料
1
MySQL8.0.12
2
Navicat
方法/步骤
1
查看原始员工表, 记录将按顺序存储在磁盘上, 很可能是按员工号列的顺序存储, 因此员工编号101将遵循 100, 依此类推。
2
在大多数情况下, 以这种方式存储数据没有多大意义;很少有情况下, 你会希望按员工编号的顺序列出员工。
3
对此数据的一个可能的查询是查找在特定办公室工作的所有员工:SELECT * FROM employees WHERE office_location_id=2;
4
此查询将需要按顺序检查每一行, 以查看 WHERE 谓词是否匹配。如果表有几千行, 则此查询可能需要一段时间, 尤其是在没有行满足条件的情况下。
5
通过为该列添加索引, 数据库将提供该列的直接查找;给出了行位置的直接引用。下图说明了它的工作原理。
6
office _ location _ id 的分组将存储在此表中, 数据库将使用它来查找基于办公位置的行。需要权衡的是, 存储索引需要更多的磁盘空间。下图显示了如何创建此索引:CREATE INDEX office_loc_idx on employees (office_location_id);
7
一旦到位, 插入到员工表中也会导致索引中的条目, 可能会使插入时间更长。权衡的是, 查找速度会快得多, 特别是在表格大小增长到几千行之后。