`

mysql 常见优化

 
阅读更多

 

一、 使用延迟查询优化 limit [offset], [rows]

经常出现类似以下的 SQL 语句:

SELECT * FROM film LIMIT 10000010

offset 特别大!

LIMIT 能很好地解决分页问题,但如果 offset 过大的话,会造成严重的性能问题,原因主要是因为 MySQL 每次会把一整行都扫描出来,扫描 offset 遍,找到 offset 之后会抛弃 offset 之前的数据,再从 offset 开始读取 10 条数据,显然,这样的读取方式问题。

 

 

可以通过延迟查询的方式来优化

假设有以下 SQL,有组合索引(sex, rating

SELECT <cols> FROM profiles where sex='M' order by rating limit 10000010;

 

则上述写法可以改成如下写法

SELECT <cols> 
  
FROM profiles 
inner join
(
SELECT id form FROM profiles where x.sex='M' order by rating limit 10000010)
as x using(id);

 

这里利用了覆盖索引的特性,先从覆盖索引中获取 100010 id,再丢充掉前 100000 id,保留最后 10 id 即可,丢掉 100000 id 不是什么大的开销,所以这样可以显著提升性能

 

二、 利用 LIMIT 1 取得唯一行

数据库引擎只要发现满足条件的一行数据则立即停止扫描,,这种情况适用于只需查找一条满足条件的数据的情况(如查询是否存在时,可以使用limit 1,而非count(*))。

三、 注意组合索引,要符合最左匹配原则才能生效

假设存在这样顺序的一个联合索引“col_1, col_2, col_3”。这时,指定条件的顺序就很重要。

 SELECT * FROM SomeTable WHERE col_1 = 10 AND col_2 = 100 AND col_3 = 500;
 
SELECT * FROM SomeTable WHERE col_1 = 10 AND col_2 = 100 ;
 
SELECT * FROM SomeTable WHERE col_2 = 100 AND col_3 = 500 ;

 

前面两条会命中索引,第三条由于没有先匹配 col_1,导致无法命中索引, 另外如果无法保证查询条件里列的顺序与索引一致,可以考虑将联合索引 拆分为多个索引。

四、使用 LIKE 谓词时,只有前方一致的匹配才能用到索引(最左匹配原则)

 SELECT * FROM SomeTable WHERE col_1 LIKE '%a';
 
SELECT * FROM SomeTable WHERE col_1 LIKE '%a%';
 
SELECT * FROM SomeTable WHERE col_1 LIKE 'a%';

上例中,只有第三条会命中索引,前面两条进行后方一致或中间一致的匹配无法命中索引

 

五、 简单字符串表达式

模型字符串可以使用 _ 时, 尽可能避免使用 %, 假设某一列上为 char(5)

 

不推荐

SELECT 
    first_name, 
    last_name,
    homeroom_nbr
  
FROM Students
 
WHERE homeroom_nbr LIKE 'A-1%';

 

推荐

SELECT first_name, last_name
homeroom_nbr
  
FROM Students
 
WHERE homeroom_nbr LIKE 'A-1__'--模式字符串中包含了两个下划线

 

六、 如有必要,使用 force index() 强制走某个索引

SELECT col from orders FORCE INDEX(order_no) WHERE order_no = 'xxxxx' ;

七、批量插入,速度更快

推荐用

INSERT INTO TABLE (id, user_id, title) VALUES (12'a'),(2,3,'b');

不推荐用

INSERT INTO TABLE (id, user_id, title) VALUES (12'a');
INSERT INTO TABLE (id, user_id, title) VALUES (2,3,'b');

 

 

 

 

注:本文来自 IT牧场 公众号  

分享到:
评论

相关推荐

    千金良方:MySQL性能优化金字塔法则.docx

    MySQL性能优化金字塔法则 MySQL性能优化是指通过调整MySQL数据库的配置、优化数据库结构和查询语句等方式,提高MySQL数据库的性能和响应速度,以满足应用程序的需求。MySQL作为最流行的开源数据库之一,被广泛应用...

    mysql优化笔记+资料

    优化MySQL是提升系统性能、减少资源消耗和提高响应速度的关键。以下是一份详细的MySQL优化笔记,涵盖了多个方面: 一、查询优化 1. 使用索引:为经常用于搜索的列创建索引可以显著加快查询速度。B树和哈希索引是最...

    Mysql性能优化教程

    MySQL性能优化是数据库管理中的关键环节,特别是在高并发场景下,优化MySQL的性能对于提升系统整体效率至关重要。本教程将深入探讨MySQL性能优化的各个方面,帮助你理解并实践有效的优化策略。 首先,我们来了解**...

    mysql性能优化教程.pdf (by caoz)

    ### MySQL性能优化知识点详解 #### 一、背景及目标 - **目的**:厦门游家公司(4399.com)为了提升员工技能水平,制定了这份MySQL性能优化教程,旨在为已有一定MySQL使用经验的工程师提供实战指导。 - **适用场景*...

    mysql 性能优化与架构设计(word版)

    2. 主从复制:主从复制是MySQL常见的高可用和负载均衡方案。主库负责写操作,从库负责读操作,实现读写分离,减轻主库压力。 3. 主主复制:主主复制提供更高的数据冗余和容错性,允许两个节点同时接受读写操作,当...

    Mysql 性能优化之架构优化

    ### MySQL性能优化之架构优化详解 #### 一、引言 在MySQL的性能优化中,架构优化是一项重要的工作。良好的数据库架构设计不仅能够提升系统的整体性能,还能够降低后续维护的成本。本文主要围绕数据索引及其对性能...

    mysql性能优化总结

    - **Btree索引**:Btree索引是MySQL中最常见的索引类型,适用于范围查询和排序。它基于平衡二叉树结构,可以快速定位数据。 - **Hash索引**:主要用于Memory引擎,提供快速查找,但不支持范围查询、排序和前缀索引...

    mysql基础知识和mysql优化整理

    本文将深入探讨MySQL的基础知识和优化策略。 一、MySQL基础知识 1. 数据库与表:MySQL中的数据库是一个逻辑存储单元,用于组织相关数据。表是数据库中的基本元素,由列和行构成,用来存储具体的数据。 2. 数据...

    mysql深度学习者 MySQL性能优化总结

    MySQL 性能优化总结 MySQL 性能优化是数据库管理和开发人员需要掌握的重要技能。性能优化的目标是让查询更快,减少查询所消耗的时间。为了达到这个目标,我们需要从每一个环节入手,包括连接、配置优化、索引优化、...

    MySql性能优化集合--满满的干货

    查询优化是MySQL优化中最常见也是最重要的一环。常用的一种工具是`EXPLAIN`命令,它可以显示SQL查询的执行计划。 - **语法**:`EXPLAIN SELECT * FROM tb_item;` - **结果说明** - **id**:表示SELECT查询的...

    Mysql性能优化教程.doc

    ### MySQL性能优化教程知识点概述 #### 一、MySQL执行优化 **1.1 背景及目标** - **背景**: 针对已具备一定MySQL使用经验的工程师,特别是适用于高并发、海量数据处理的互联网环境。 - **目标**: 通过对MySQL性能...

    MySQL索引优化课件

    MySQL索引优化是数据库性能提升的关键技术之一,尤其在处理大量数据时,高效索引能够显著加快查询速度,降低服务器负载。本课件主要聚焦于MySQL数据库的索引原理、优化策略以及相关存储过程和触发器的应用。 首先,...

    mysql性能优化视频教程

    ### MySQL性能优化关键知识点 #### 一、MySQL优化思路 MySQL优化主要分为三个层次:SQL语句优化、表结构优化以及服务器配置优化。 1. **SQL语句优化**: - **选择合适的索引**:确保查询时使用的字段被正确索引...

Global site tag (gtag.js) - Google Analytics