`

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性能优化教程

    Mysql 执行优化 2 认识数据索引 2 为什么使用数据索引能提高效率 2 如何理解数据索引的结构 2 优化实战范例 3 认识影响结果集 4 影响结果集的获取 4 影响结果集的解读 4 常见案例及优化思路 5 理解执行状态 7 常见...

    mysql性能优化视频教程

    教程包含mysql优化思路讲解、索引优化、分页优化、主从复制集群配置、分区、事务讲解以及其他常见问题讲解等

    MySQL 常见的 9 种优化方法

    MySQL 常见的 9 种优化方法

    Mysql的性能优化

    Mysql 执行优化 2 认识数据索引 2 为什么使用数据索引能提高效率 2 如何理解数据索引的结构 2 如何理解影响结果集 3 理解执行状态 4 常见分析手段 4 分析流程 6 总结 7 Mysql 运维优化 9 存储引擎类型 9 内存使用...

    MySQL性能优化详解.docx

    以下是一些常见的优化策略: 使用EXPLAIN分析查询:通过在查询语句前加上EXPLAIN关键字,可以了解MySQL是如何处理该语句的,从而识别出潜在的性能瓶颈。 优化表的关联顺序:在多表关联查询时,MySQL的查询优化器会...

    MySQL.xmind

    MySQL常见优化思路导图

    MySQL常见面试题(小结).pdf

    《MySQL常见面试题(小结).pdf》是一份针对MySQL面试常见问题的小结资料,内容涵盖了MySQL基础知识、SQL语句、索引优化、备份与恢复等方面的面试题目。适用于准备MySQL相关岗位面试的求职者、MySQL初学者以及想要巩固...

    企业级MySQL优化(从引擎为你介绍怎么优化、集群方案)

    双机热备)、讲解算法演变历程与算法解剖优缺点(时间/空间复杂度、hash开口/封闭寻址、二叉树、AVL平衡二叉树、红黑树、B-树、B+树、B*树)、MySQL引擎、MySQL数据量计算、常见企业级优化策略等。

    mysql-常见问题,索引优化

    mysql日常使用过程中遇到的问题,以及解决办法,包括discount的bug,avg(null),紧凑索引,松散索引,以及索引优化

    mysql数据库面试题及答案mysql常见面试题调优优化图解

    mysql面试题及答案,mysql面试题及答案mysql面试题及答案mysql面试题及答案,助力你通过面试,mysql面试详细图解答案146问

    MySQL中的SQL的常见优化策略.docx

    最全的MySql优化总结

    mysql数据库开发常见问题及优化.docx

    mysql数据库开发常见问题及优化.docx

    mysql性能优化详解

    MySQL数据库是常见的两个瓶颈是CPU和I/O的瓶颈,CPU在饱和的时候一般发生在数据装入内存或从磁盘上读取数据时候。磁盘I/O瓶颈发生在装入数据远大于内存容量的时候,如果应用分布在网络上,那么查询量相当大的时候...

    MYSQL优化详情大全

    以下是一些常见的MySQL优化方法和技巧的描述: 优化数据库结构:设计良好的数据库结构可以提高查询效率。包括正确选择数据类型、合理设置索引、避免冗余字段等。 优化查询语句:编写高效的查询语句可以减少数据库...

    mysql配置优化基本信息

    MySQL数据库是常见的两个瓶颈是CPU和I/O的瓶颈,CPU在饱和的时候一般发生在数据装入内存或从磁盘上读取数据时候。磁盘I/O瓶颈发生在装入数据远大于 内存容量的时候。

    MySQL常见面试题.pdf

    MySQL常见面试题: 1. 什么是数据库?什么是关系数据库管理系统(RDBMS)? 2. 解释主键、外键和索引在数据库中的作用。 3. 什么是事务?如何确保事务的原子性和一致性? 4. 如何创建一个数据库和表格? 5. 如何向...

    新版 MySQL DBA 高级视频 基于MySQL 5.7 MySQL 8.0版本.rar

    │ 第二十一课MySQL常见错误-converted.pdf │ 第二十课MySQL索引和调优.pdf │ 第二课MySQL入门介绍.pdf │ 第五课MySQL常用函数介绍.pdf │ 第八课InnoDB内核.pdf │ 第六课SQL高级应用.pdf │ 第十一课MySQL表...

    MySQL笔试题33道(附带答案、表结构与数据

    机测并精心整理筛选的33道MySQL笔试题(附带答案、表结构与数据),安装数据库后导入test.sql文件即可练习

    MySQL的优化多种方法(至少15条)

    优化mysql数据库的方法:建立Index索引,少用select语句,开启查询缓存,选择适合的存储引擎,避免在where子句中使用or来...所以mysql数据库的优化操作大家都要有所了解,本文就主要总结了mysql数据库中常见的优化方法

Global site tag (gtag.js) - Google Analytics