Mysql查询优化

4 篇文章 0 订阅
订阅专栏

Mysql查询优化器

        Mysql的查询优化器会优先查询缓存,若缓存没有命中,再去解析SQL,查询优化器还会优化SQL,即使where条件中的等值查询条件按照索引的顺序进行排序。

1.不在索引列上做任何操作

        如果查询的列不是独立的,Mysql就不会走索引,不是独立的列是指索引的列不能是表达式或者是函数的参数

例:索引中使用表达式,Mysql走的是全表扫描

 优化:

  • 将索引列单独放在比较符号的一侧
  • 索引列尽量不使用函数

2.尽量全值匹配

        要查询的列尽量在联合索引中一一匹配,能在where条件中使用索引就尽量使用,这样可以提高key_len

例:要查询unique_id,name,holder,ip,建立(asset_number,unique_id,name,holder,ip)的联合索引

 优化:

  • 尽量在where中使用联合索引中的字段

3.最佳左前缀

        Mysql的索引底层是B+树,所有的索引都在B+树的叶子节点并且是连续的,叶子节点会按照索引建的顺序进行构建,即最左边的索引会在叶子节点的最高层并按照升序进行排序,当第一个索引的列相等时,第二个索引才会小范围排序,这样就导致查询索引会首先匹配叶子节点的第一层,如果跳过第一层直接查询第二层是不会走索引的。

 例:查询unique_id,NAME,holder,ip,建立(unique_id,NAME,holder,ip)的索引,查询条件直接根据name匹配,会使联合索引中的第一个索引失效。

 优化

  • 建立了联合索引,尽量按照联合索引的最左边的索引进行匹配
  • 若需要跳过最左边的列进行匹配,可单独建立索引

4.范围条件放最后(索引定义顺序的最后)

       当查询条件中间有范围查询时,会使后面的索引失效

        Mysql的查询优化器会使where条件中的查询条件按照索引的顺序进行排序,因此将要范围查询的索引列放到联合索引的最后是最合适的,因为前面的等值条件已经筛选出了小部分数据,过滤掉了无用的数据,因此范围查询放最后效率也是很高的

例:

优化:

  • 将要范围查询的索引列放到联合索引的最后

5.尽量使用覆盖索引

        要查询的列尽量全部建立联合索引,这样可以避免Mysql的B+树要查询索引中没有的列而进行的回表操作(甚至全表扫描),降低了IO的使用率。

例:要查询unique_id,name,holder,ip,就建立(unique_id,name,holder,ip)的联合索引

 优化:

  • 要查询的列全部建立联合索引

6.慎用不等于(!=  <>)

        Mysql的查询条件中用到了不等于(!= <>)会使索引失效,导致查询走全表扫描

7.Like要当心(%)

        当Mysql的模糊查询 % 在前面时,会使索引列失效,走全表扫描

        因为Mysql的底层是B+树,B+树叶子节点的索引数据是连续的(根据索引列升序排序),因此当 % 在前面会使B+树不知道怎样去使用索引查询,从而使索引失效

例:根据索引(unique_id)查询

8.字符串类型加引号

        Mysql的查询优化器会自动进行类型转换,因此当查询条件不加引号时,会使索引列失效

9.使用or要注意

        当Mysql查询时使用到了or,且其中一个不是索引列时,Mysql不会走索引,会走全表扫描

优化:

  • 使用union all代替or
  • 使用覆盖索引

10.排序要小心

        当Mysql的排序(ASC,DESC)后使用了两个列,且两个列来自不同的索引,是不会走索引的。

        当Mysql的排序既用到了ASC,又用到了DESC,Mysql是不会走索引的

优化:

  • 排序要么都用DESC,要么都用ASC
  • 当需要对多个列排序时,将这两个列按照顺序建立联合索引

11.主键按照顺序进行插入

        最好避免随机的(不连续且值的分布范围非常大)聚簇索引,特别是对于I/O密集型的应用。例如,从性能的角度考虑,使用UUID来作为聚簇索引则会很糟糕,它使得聚簇索引的插入变得完全随机,这是最坏的情况,使得数据没有任何聚集特性

        最简单的方法是使用AUTO_INCREMENT自增列。这样可以保证数据行是按顺序写入,对于根据主键做关联操作的性能也会更好

12.优化分页(LIMIT)

        Mysql的分页语句LIMIT会将偏移量前的数据全部查询出来,然后抛弃掉不需要的数据,返回需要的数据,因此当LIMIT的偏移量很大时,代价是很高的。

例:

优化:

  • 使用子查询,先查询到需要查询的id,然后进行关联查询

php+mysql查询优化简单实例
10-24
主要介绍了php+mysql查询优化简单实例,分析了php+mysql程序设计中关于SQL语句优化查询的技巧,对于提高查询效率有一定参考借鉴价值,需要的朋友可以参考下
mysql查询优化
09-02
对于一个以数据为中心的应用,数据库的好坏直接影响到程序的性能,因此数据库性能至关重要。一般来说,要保证数据库的效率,要做好以下四个方面的工作:数据库设计、sql语句优化数据库参数配置、恰当的硬件资源和操作系统,这个顺序也表现了这四个工作对性能影响的大小
Mysql查询优化从入门到入土详解含示例(值得珍藏)
01-29
随着互联网的快速发展,数据库已经成为应用程序的重要组成部分。MySQL作为最流行的关系型数据库管理系统之一,广泛应用于各种场景。然而,随着数据量的增长,查询性能问题逐渐凸显出来。因此,了解如何优化MySQL查询性能至关重要。 本文通过详细的示例和说明,深入探讨了MySQL查询优化的重要性及其实现方法。我们介绍了查询优化技术的各个方面,包括索引、查询语句、表结构等基本优化方法以及高级优化技术如查询缓存、数据库分区、使用覆盖索引和使用压缩技术等。通过合理应用这些优化技术,可以提高数据库的响应速度、降低资源消耗并提升应用程序的性能。在实际应用中,需要根据实际情况进行评估和选择合适的优化方法,以实现最佳的性能效果。
MySQL: 范围查询优化
weixin_42326851的博客
05-30 4006
MySQL: 范围查询优化
多表查询
sjwl0526的博客
09-09 1474
多表查询 概述 基础语法: select ​ 列名列表 from ​ 表名列表 where… 多表查询的分类 内连接查询: 隐式内查询: 使用where消除无用的数据 显式内查询 外链接查询: 子查询
MySQL查询优化终极版(强烈建议收藏)
侯风飞的博客
02-09 280
MySQL查询优化绝世宝典,包括了select查询优化所有的方法和方案,对用户来讲是极好的。更多资源可以关注昂焱数据。
mysql in查询不要去重_MySQL 查询优化
weixin_42514777的博客
01-27 4736
使用索引规则全值匹配:查询的字段按照顺序在索引中都可以匹配到,最佳左前缀法则:指的过滤条件要使用索引必须按照索引建立时的顺序依次满足 , 一旦跳过某个字段 , 索引后面的字段都无法被使用。不在索引列上做计算:不在索引列上做任何操作(计算、函数、(自动 or 手动)类型转换「尤其注意 varchar 和 int」),会导致索引失效而转向全表扫描。索引列上不能有范围查询:将可能做范围查询的字段的索引顺...
MySQL优化-查询优化
qq_51398439的博客
06-02 2057
查询优化数据库优化中的一个重要方面,可以提高查询的效率和响应速度,从而提升数据库系统的整体性能。以下是一些查询优化的总结:使用索引:索引可以加速查询的速度,因此需要在经常使用的字段上创建索引,避免在 where 子句中使用不等于避免在 where 子句中使用 or 操作符,避免在 where 子句中使用函数,避免在 where 子句中使用模糊查询。避免全表扫描:尽量避免使用不带条件的 select 语句,因为这会导致数据库执行全表扫描,而且会消耗大量的系统资源。
Mysql范围查询优化
InternalsOf
04-02 3322
mysql range optimization 速查1:eq_range_index_dive_limit决定的两种评估方式 对比 Dive Statistic 真实 idx1(t1,t2,k) 5(误差0%) 2(误差60%) 5 Idx2(t1,k) 1026(误差0%) 985(误差%) 1026(误差4%) statistics时长 0.188ms 0.107ms...
MySQL查询优化
12-14
2 分页查询优化 2.1 根据自增且连续的主键排序的分页查询 2.2 根据非主键字段排序的分页查询 3 Join关联查询优化 4 in和exsits优化 5 count(*)查询优化 笔者使用的MySQL版本是8.0.13。 1 索引优化MySQL...
Mysql查询优化详解(含示例)
05-06
文章还探讨了优化查询语句的方法,如避免在列上进行函数或计算、使用连接代替子查询等。此外,还强调了优化表结构、服务器配置以及硬件和配置优化的重要性。具体实例和代码片段贯穿全文,为读者提供了具体的指导和...
mysql8.0 之 sql 优化《三B》 之 优化范围查询 总览 总结
银河系天城知识宝库_技术专家蒋浩宇
03-08 524
单部分索引的范围访问方法 单部分索引的范围条件的定义如下: 对于这两种BTREE和HASH索引,使用时具有恒定值的关键部分的比较是一个范围条件 = &lt;=&gt;,in(),is null or,is not null运营商。 另外,对于BTREE索引,使用时具有恒定值的关键部分的比较是一个范围条件 &gt;,&lt;,&gt;=,&lt;=,between,!=,&lt;&gt;运营...
mysql怎么优化查询
weixin_57242877的博客
12-07 1168
MySQL数据库优化方式
mysql范围查找性能_MYSQL(四)查询性能优化
weixin_28748675的博客
01-19 367
优化数据访问1.是否向数据库请求了不需要的数据解决方式:A.查询后加limitB.Select后写需要的列而不是*2.是否扫描了额外的数据数据库的访问方式速度由慢到快:全表扫描,索引扫描,范围扫描,唯一索引查询,常数引用MYSQL Explain命令 的type(数据库引擎访问表的方式):Const > ref > range > index > all1.cons...
MySQL查询优化之二-范围优化(Range Optimization)
热门推荐
itas109的专栏
01-24 1万+
MySQL查询优化之二-范围优化(Range Optimization) 如需转载请标明出处:http://blog.csdn.net/itas109 QQ技术交流群:12951803 环境: MySQL版本:5.5.15 操作系统:windows 本文讨论范围优化范围访问方法使用一个单独的索引来取回一个表记录的子集, 包含在一部分或者多个部分, 索引值区间。它可用于
Mysql-查询优化
04-22 5890
一、查询慢的原因 在Mysql查询过程成,出现性能问题可能存在方方面面的原因,主要包括如下几种:网络、CPU、IO、上下文切换、系统调用、生成统计信息、锁等待时间等。 二、如何优化数据访问 1、减少访问数据量 确认应用程序是否存在检索大量超过需要的数据。 mysql> explain select id, phone from test_user_copy limit 30000,1; +----+-------------+----------------+------------+--
MySQL深入理解MVCC机制(详解)
最新发布
m0_60500421的博客
05-08 1053
深入理解mvcc机制
mysql 查询优化
09-20
首先,优化查询语句是提高MySQL查询性能的重要方式之一。我们可以通过使用索引,避免全表扫描,减少查询时间。同时,可以通过优化查询条件,合理利用MySQL查询优化器,提高查询效率。比如,可以避免在查询条件中...

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
写文章

热门文章

  • Java并发编程(二)(锁) 1221
  • Kafka消息中间件(二)(生产与消费全流程) 987
  • Mysql(四)(通过索引进行优化) 728
  • Mysql查询优化 652
  • Redis缓存数据库(八)(缓存淘汰算法和过期策略) 608

分类专栏

  • mysql 4篇
  • Java多线程 2篇
  • 设计模式
  • kafka 2篇
  • RabbitMQ
  • redis 2篇

最新评论

  • Java并发编程(二)(锁)

    余 空 。: 乐观锁是继续尝试,写错了

  • Java并发编程(二)(锁)

    Never。: 乐观锁和悲观锁概念写反了

  • Redis缓存数据库(七)(缓存的使用问题)

    CSDN-Ada助手: 恭喜您写了第10篇博客,题目也很吸引人。文章内容也很详细,讲解了缓存的使用问题,对初学者非常有帮助。希望您能够继续保持创作的热情,分享更多有价值的知识和经验。作为下一步的创作建议,或许您可以写一些高级应用场景下的Redis缓存使用,这样可以吸引更多专业人士的阅读。再次感谢您的分享,期待您的下一篇佳作。 CSDN 会根据你创作的博客的质量,给予优秀的博主博客红包奖励。请关注 https://bbs.csdn.net/forums/csdnnews?typeId=116148&utm_source=csdn_ai_ada_blog_reply10 看奖励名单。

您愿意向朋友推荐“博客详情页”吗?

  • 强烈不推荐
  • 不推荐
  • 一般般
  • 推荐
  • 强烈推荐
提交

最新文章

  • Mysql(四)(通过索引进行优化)
  • Redis缓存数据库(八)(缓存淘汰算法和过期策略)
  • Redis缓存数据库(七)(缓存的使用问题)
2023年6篇
2022年5篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

深圳SEO优化公司广安百姓网标王哪家好海西优化公司海南营销型网站建设推荐德州外贸网站制作哪家好长春企业网站建设价格临沂关键词排名哪家好马鞍山企业网站设计德州百度网站优化推荐娄底建设网站三明网站推广方案多少钱赣州英文网站建设安康seo价格梅州网站设计推荐南宁网络广告推广公司爱联百度标王哪家好汕尾企业网站建设报价内江网站优化按天扣费乐山网站推广报价海北关键词排名公司龙岩设计公司网站推荐营口百度关键词包年推广哪家好甘孜网站推广系统推荐漳州网站关键词优化公司张掖如何制作网站报价江门阿里店铺托管公司绵阳百度网站优化公司和田SEO按天收费多少钱漯河百度爱采购多少钱大庆英文网站建设推荐西宁网站关键词优化推荐歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

深圳SEO优化公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化