MySQL SQL优化
MySQL SQL 语句优化
sunset_ggz
这个作者很懒,什么都没留下…
展开
-
查询重写
查询重写 Query Rewrite Plugin 通过规则匹配的方式,将符合条件的 SQL 进行重写,从而达到调整执行计划或者其他的目的。一、安装 在 $mysqlhomt/share 目录下执行安装脚本,创建 query_rewrite 数据库和 rewrite_rules 规则表mysql -uroot -p -S /home/mysql/mysql.sock < /home/mysql/mysql/share/install_rewriter.sqlmysql> sho原创 2020-06-05 01:17:43 · 640 阅读 · 0 评论 -
使用 SQL 提示
使用 SQL 提示 强制使用临时表 SQL_BUFFER_RESULT ,当我们查询的结果集中的数据比较多时,可以通过SQL_BUFFER_RESULT。选项强制将结果集放到临时表中,这样就可以很快地释放MySQL的表锁(这样其它的SQL语句就可以对这些记录进行查询了),并且可以长时间地为客户端提供大记录集。代价是服务器端需要更多的内存。SELECT SQL_BUFFER_RESULT * FROM TABLE1 WHERE … 1、未指定索引mysql> desc select co原创 2020-06-05 00:37:22 · 235 阅读 · 0 评论 -
优化分页查询
优化分页查询方法一 在索引上完成排序分页操作,最后根据主键关联回原表查询所需要的其他列内容。mysql> desc select customer_id,email from customer_t order by last_name limit 50,5 \G; *************************** 1. row原创 2020-06-05 00:30:49 · 86 阅读 · 0 评论 -
优化嵌套查询
优化嵌套查询 子查询有些情况下可以被更有效的连接(JOIN)替代。因为连接(JOIN)不需要再内存中创建临时表来完成这个逻辑上需要两个步骤的查询工作。如下所示:可以看出查询关联的类型从 index_subquery 调整为 ref.#子查询mysql> desc select * from customer where customer_id not in(select customer_id from payment) \G;*************************** 1. r原创 2020-06-04 23:30:43 · 380 阅读 · 0 评论 -
优化 JOIN 操作
优化 JOIN 操作一、NLJ算法 Nested-Loop Join(NLJ) —— MySQL 对于多表 JOIN 在目前只支持的一种算法 。NLJ 原理:内外两层循环,对于循环的每条记录,都要在内循环中做一次检索。例如: t1 和 t2 表进行 join, t1通过范围扫取每条记录作为外循环,t2通过关联字段在表中做扫描,满足条件则返回客户端;不断重复这个过程直到外循环结束。外循环的表通常也称为驱动表。1、NLJ 的性能高低主要取决于两方面: 1) 外循环的结果集大小。(可以在驱动表(外循环原创 2020-06-04 23:22:56 · 416 阅读 · 0 评论 -
优化 GROUP BY 语句
优化 GROUP BY 语句 默认情况下,MySQL对所有GROUP BY col1,col2,…的字段进行排序。与在查询中指定 ORDER BY col1,col2,…类似。因此,如果显式包括一个包含相同列的 ORDER BY 子句,则对MySQL的实际执行性能没有什么影响。 如果查询包括 GROUP BY 但用户想要避免排序结果的消耗,则可以指定 ORDER BY NULL 禁止排序,如下:#默认情况mysql> explain select payment_date,sum(amou原创 2020-06-04 22:30:03 · 246 阅读 · 0 评论 -
优化 ORDER BY 语句
文章目录优化 ORDER BY 语句一、MySQL 中两种排序方式二、优化方法三、Filesort 排序算法优化 ORDER BY 语句一、MySQL 中两种排序方式 1) 第一种通过有序索引顺序扫描直接返回有序数据,这种方式在使用 explain 分析查询的时候显示为 Using index (即通过索引列就能返回所需要的数据),不需要额外的排序,操作效率较高。mysql> explain select customer_id from customer order by store_id原创 2020-06-04 22:25:17 · 175 阅读 · 0 评论 -
MySQL 优化 LOAD 速度
文章目录MySQL 优化 LOAD 速度一、优化 MyISAM 表 LOAD 速度二、优化 InnoDB 表 LOAD 速度三、总结MySQL 优化 LOAD 速度一、优化 MyISAM 表 LOAD 速度 DISABLE KEYS 和 ENABLE KEYS 用来打开或者关闭 MyISAM 表非唯一索引的更新。在导入大量的数据到一个非空的 MyISAM 表时,通过这两个命令可以提高导入的效率。对于导入大量数据到一个空的 MyISAM 表,默认就是先导入数据后才创建索引的,所以不用进行设置。 1原创 2020-06-03 00:47:02 · 1484 阅读 · 0 评论 -
定期分析表、检查表和优化表
文章目录定期分析表、检查表和优化表一、分析表二、检查表三、优化表定期分析表、检查表和优化表 注意: ANALYZE、CHECK、OPTIMIZE、ALTER TABLE 执行期间将对表进行锁定,因此一定注意要在数据库不繁忙的时候执行相关的操作。一、分析表 分析表,analyze 分析表语句用于分析和存储表的关键字分布,分析的结果可以使用系统得到更准确的统计信息,使得 SQL 能够生成正确的执行计划。在分析期间对表有一个读取锁定。这对于 MyISAM、BOB 和 InnoDB 表有作用。对于 My原创 2020-06-02 23:43:49 · 311 阅读 · 0 评论 -
MySQL 存在索引但不能使用索引的典型场景
文章目录MySQL 存在索引但不能使用索引的典型场景一、以 % 开头的 LIKE 查询不能够利用 B-Tree 索引二、出现隐式转换三、不满足最左原则四、MySQL优化器认为用索引比全表扫描更慢五、有 or 分割开的条件MySQL 存在索引但不能使用索引的典型场景表结构mysql> show index from actor;+-------+------------+---------------------+--------------+-------------+-----------+原创 2020-06-02 00:45:28 · 245 阅读 · 0 评论 -
MySQL 中能够使用索引的典型场景
文章目录MySQL 中能够使用索引的典型场景一、匹配全值二、匹配值的范围查询三、匹配最左前缀四、仅仅对索引进行查询五、匹配列全缀六、能够实现索引匹配部分精确而其他部分进行范围匹配MySQL 中能够使用索引的典型场景 表结构mysql> show index from rental;+--------+------------+---------------------+--------------+--------------+-----------+-------------+------原创 2020-06-01 23:54:02 · 225 阅读 · 0 评论 -
前缀索引&虚拟列索引
前缀索引&虚拟列索引一、前缀索引#创建前缀索引,注意:前缀索引,在排序 Order By 和 分组 Group By 操作是无法使用。create index idx_title on film(title(10));二、虚拟列索引#1)创建一个虚拟列 amount_by_lkalter table payment add column amount_by_lk int generated always as (round(amount*10));#2)在虚拟列上创建索引alte原创 2020-06-01 23:43:56 · 220 阅读 · 0 评论 -
优化SQL的一般步骤
文章目录优化SQL的一般步骤一、分析执行计划二、查看执行过程中线程的每个状态和消耗时间三、分析优化器如何选择执行计划四、确定问题并采取相应的优化措施优化SQL的一般步骤一、分析执行计划 1、通过 EXPLAIN 分析低效 SQL 的执行计划mysql> explain select sum(amount) from customer a, payment b where 1=1 and a.customer_id = b.customer_id and email = 'JANE.BENNE原创 2020-06-01 23:10:12 · 201 阅读 · 0 评论