两千四百万数据量SQL查询
没有索引时
如果字段无索引,耗时十分钟
无索引查询过程
MySQL 需要对 2400 万条数据一一进行比较,假设每条记录的处理时间为 0.025 ms,那么总查询时间大约为 10 分钟(即 2400 万 × 0.025 ms)。
•全表扫描: 当查询 kh = '03356129487' 时,如果表上没有对 jd_kh 字段创建索引,MySQL 会执行全表扫描。这意味着 MySQL 需要从头到尾逐行读取表中的所有 2400 万条记录,逐条比较kh字段的值,找到符合条件的记录。
•数据量大: 由于表中有 2400 万条记录,全表扫描在每一条记录上都执行一次比较操作,耗时非常长,通常会导致查询的时间成倍增长。
有索引时
有索引时,耗时0.22秒
有索引查询过程
使用 B-Tree 索引时,查找过程可能只需要经过 20 次左右的比较操作就能定位到目标数据,处理时间仅为数毫秒。
有索引查询过程
•使用索引查找: 当在kh字段上创建了索引后,MySQL可以利用这个索引来快速定位到符合条件的记录。索引类似于一本书的目录,能够快速指向数据所在的位置,而不必逐条扫描整个表。
•索引的工作原理: 索引通常使用数据结构如 B-Tree 或 Hash 实现,这些结构使得查找操作的时间复杂度为 O(log N) 或 O(1),远远快于全表扫描的 O(N)。
•减少 IO 操作: 使用索引意味着 MySQL 不需要读取整个表,只需访问特定的索引节点,然后直接定位到目标记录,大大减少了磁盘 IO 操作的次数,从而大幅提升查询速度。
索引的影响
作用
•提高查询效率: 索引通过将查找过程缩小到更少的数据范围,大幅减少了需要扫描的数据量。
•降低计算复杂度: 索引的使用将查询复杂度从线性时间 O(N) 降低到对数时间 O(log N) 或更低,这就是查询速度差距如此之大的根本原因。
注意事项
•索引的选择: 并不是所有字段都适合创建索引,索引会占用额外的存储空间,并在数据写入(INSERT/UPDATE/DELETE)时带来一定的性能开销。因此,应该在查询频繁、选择性高的字段上创建索引。
•索引维护: 定期维护索引(如重建索引、分析表等)有助于保持索引的高效性。