mysql查询优化

1.查询性能低下最基本的原因是访问的数据太多。访问了太多的行,有时候也可能是访问了太多的列。

2.请求超过实际需要的数据:1.查询不需要的记录 limit杜绝2.多表关联时返回全部列 3.总是取出全部列 无法完成索引覆盖这类优化,但并不总是坏事

3.重复查询相同的数据,注意缓存

响应时间:服务时间+排队时间(等待I/O,锁等)

扫描的行数:

1.并不完美的指标:不是所有的行的访问代价都是相同的,比如 较短的行的访问速度更快,内存中的行也比磁盘中的行的访问速度要快得多

2.访问类型:在explain语句中的type列反应了访问类型。访问类型有很多种,从全表扫描到索引扫描,范围扫描,唯一索引查询,常数引用等。速度从慢到快,扫描行数从小到大。

一般mysql能够使用如下三种方式应用where条件,从好到坏依次为:

  1.在索引中使用where条件来过滤不匹配的记录,这是在存储引擎层完成的。

  2.使用索引覆盖扫描(在Extra列中出现了Using index)来返回记录,直接从索引中过滤不需要的记录并返回命中的结果。这是在mySql服务器层完成的,但无须再回表查询记录

  3.从数据表中返回数据,然后过滤不满足条件的记录(在Extra列中出现Using where)。这在mysql服务器层完成,mysql需要先从数据表读出记录然后过滤。

3.返回的行数

相关推荐