MySQL 学习之索引篇和查询

1、如果查询中的列不是独立的,则mysql就不会使用索引。“独立的列”是指索引列不能是表达式的一部分,也不能是函数的参数
2、对于BLOB、TEXT或者很长的VARCHAR类型的列,必须使用前缀索引,因为mysql不允许索引这些列的完整长度
3、前缀索引是一种能使索引更小更快的有效办法,但mysql无法使用前缀索引做OREDR BY和GROUP BY,也无法使用其做覆盖扫描
4、选择索引的列顺序的法则:将选择性最高的列放到索引的最前面
5、对于mysql而言,最简单的衡量查询开销的三个指标如下:

  • 响应时间
  • 扫描的行数
  • 返回的行数

6、mysql的执行过程:

  • 客户端发送一条查询给服务器
  • 服务器先检查查询缓存,如果命中了缓存,则立刻返回存储在缓存中的结果,否则进入下一个阶段
  • 服务器端进行sql解析、预处理、再由优化器生成对应的执行计划
  • mysql根据优化器生成的执行计划,调用存储引擎的API来执行查询
  • 将结果返回给客户端

7、mysql的查询状态

  • Sleep:线程正在等待客户端发送新的请求
  • Query:线程正在执行查询或者正在将结果发送给客户端
  • Locked:在mysql服务器层,该线程正在等待表锁
  • Analyzing and statistics : 线程正收集存储引擎的统计信息,并生成查询的执行计划
  • Copying to tmp table [on disk]:
  • 线程正在查询结果,并且将其结果都复制到一个临时表单中,如果有on disk标记,那表示mysql正在将一个内存临时表放到磁盘上
  • Sorting result: 线程正在对结果集进行排序
  • sending data : 这表示多种情况:线程可能是子啊多个状态之间传递数据,或者在生成结果集,或者在向客户端返回数据

8、

本作品采用《CC 协议》,转载必须注明作者和本文链接
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!