Rumah > pangkalan data > tutorial mysql > 高性能MySQL-特定类型查询的优化详解

高性能MySQL-特定类型查询的优化详解

黄舟
Lepaskan: 2017-03-15 17:23:48
asal
1821 orang telah melayarinya


这一节主要是对于一些特定类型的优化查询:
 (1)count查询优化;
 (2)关联查询
 (3)子查询
 (4)GROUP BY 和 DISTINCT优化
 (5)LIMIT 分页优化

count查询优化

COUNT()聚合函数的作用:
(1)统计某一个列值的数量,也可以统计行数。需要注意的是统计列值时要求列值是非空的(不统计NULL)

(2)统计结果集的行数。当列值不可能为空时统计的就是表的行数。但是为了确保一定要使用COUNT()获取结果集的行数。通配符会直接忽略所有列值直接计算行数,进行优化。

对于MyISAM存储引擎,当在单表中没有限定where查询条件时COUNT(*)是非常快的,因为MyISAM本身已经存了这个行数总值。当存在where限定条件,也是需要进行查询统计的。

下面给出一个简单优化的使用示例:
(1)优化一:

这里写图片描述

可知如果我们直接查 id>100 的记录,涉及到的有两千多万行记录扫描。但是由于COUNT()特性,我们可以用 count() - (id<100)的做法,这样扫描的行就只有100行了。效率大大提高。

(2)优化二:
此外除了还有一种优化方法就是利用覆盖索引了。

关联查询优化

(1)确保ON 或则USING 子句的列上有索引。创建索引时就要考虑关联的顺序,当表A和表B用列c关联的时候,如果优化器关联顺序是B、A,就只需要在表A上建立索引。没用的索引会占用存储


(2)确保任何Group by 和 order by操作中表达式只涉及到一个表中的列。这样MySQL就可能使用索引优化

子查询

尽量少用子查询,因为子查询会产生临时表;除非像count(*)临时表很小的。

GROUP BY 和 DISTINCT优化

GROUP BY 和 DISTINCT的优化最有效的就是使用索引。

当无法使用索引时,group by使用两种策略完成:临时表或则文件排序来做分组。

所有对于分组的列一定要建立索引。比如:

select product, count(*) from orders group by product;
Salin selepas log masuk

这样的一个查询,对product要建立索引。

LIMIT分页优化

进行分页操作时,通常都会通过偏移量来查询某些数据。然后再加上解释的order by,性能一般都不错。

对于order by的列 一定要加上索引。

但是对于limit 10000, 10 这样检索目标10条记录必须先先查询前面的10000条记录。代价很高,这种时候优化最简单办法就是使用覆盖索引。

Atas ialah kandungan terperinci 高性能MySQL-特定类型查询的优化详解. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan