1. 索引:
首先在索引中找到对应值,然后根据匹配的索引记录找到对应的数据行。
如果索引包含多个列,那么列的顺序十分重要,因为MySQL只能高效的使用索引的最左前缀列。在MySQL中,索引是在存储引擎层而不是服务器层实现的。
1.1 索引的类型:
1. B-Tree索引:
大多数索引都是这个类型的。索引可以用于按值查找,也可以用于查询中的Order By操作。
2. 哈希索引:哈希索引基于哈希表实现,只有精确匹配索引所有列的查询才有效
前缀索引:
mysql> CREATE TABLE city_demo(city VARCHAR(50) NOT NULL);
mysql> ALTER TABLE city_demo ADD KEY(city(7));
以city字段的前7个字符作为前缀,创建索引。
1 .查询性能低下最基本的原因是访问的数据太多。某些查询可能不可避免地需要筛选大量数据。
2. 简单衡量查询开销的三个指标如下:
响应时间;
扫描的行数;
返回的行数。
这三个指标会记录到Mysql的慢日志中。
响应时间: 服务时间+排队时间。服务时间是数据库处理这个查询花费的时间。排队时间是等待的时间,主要是I/O等待和锁等待。
在EXPLAIN语句中的type列反应了访问类型,访问类型有多种:全表扫描、索引扫描、范围扫描、唯一索引扫描、常数引用等。索引让MySQL以最高效、扫描函数最少的方式找到需要的记录。
mysql> explain select * from film_actor \G
2. 重构查询的方式:
2.1 复杂查询或者简单查询:
设计查询时,考虑是否需要将一个复杂的查询分成多个简单的查询。