电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

[全]SQL优化方法技巧实例大全

49页
  • 卖家[上传人]:赵****
  • 文档编号:158309765
  • 上传时间:2020-12-31
  • 文档格式:DOCX
  • 文档大小:1.07MB
  • / 49 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 1、SQL优化方法技巧实例大全1、MySQL的基本架构1)MySQL的基础架构图左边的client可以看成是客户端,客户端有很多,像我们经常你使用的CMD黑窗口,像我们经常用于学习的WorkBench,像企业经常使用的Navicat工具,它们都是一个客户端。右边的这一大堆都可以看成是Server(MySQL的服务端),我们将Server在细分为sql层和存储引擎层。当查询出数据以后,会返回给执行器。执行器一方面将结果写到查询缓存里面,当你下次再次查询的时候,就可以直接从查询缓存中获取到数据了。另一方面,直接将结果响应回客户端。2)查询数据库的引擎 show engines; show variables like “%storage_engine%”;3)指定数据库对象的存储引擎createtabletb(idint(4)auto_increment,namevarchar(5),deptvarchar(5),primarykey(id)engine=myISAMauto_increment=1defaultcharset=utf8;SQL优化1)为什么需要进行SQL优化?在进行多表连接查

      2、询、子查询等操作的时候,由于你写出的SQL语句欠佳,导致的服务器执行时间太长,我们等待结果的时间太长。基于此,我们需要学习怎么优化SQL。2)mysql的编写过程和解析过程 编写过程selectdinstinct.from.join.on.where.groupby.having.orderby.limit. 解析过程from.on.join.where.groupby.having.selectdinstinct.orderby.limit.提供一个网站,详细说明了mysql解析过程:https:/ 什么是索引?索引就是帮助MySQL高效获取数据的一种【数据结构】。索引是一种树结构,MySQL中一般用的是【B+树】。 索引图示说明(这里用二叉树来帮助我们理解索引)树形结构的特点是:子元素比父元素小的,放在左侧;子元素比父元素大的,放在右侧。这个图示只是为了帮我们简单理解索引的,真实的关于【B+树】的说明,我们会在下面进行说明。索引是怎么查找数据的呢?两个字【指向】,上图中我们给age列指定了一个索引,即类似于右侧的这种树形结构。mysql表中的每一行记录都有一个硬件地址,例如索引中的

      3、age=50,指向的就是源表中该行的标识符(“硬件地址”)。也就是说,树形索引建立了与源表中每行记录硬件地址的映射关系,当你指定了某个索引,这种映射关系也就建成了,这就是为什么我们可以通过索引快速定位源表中记录的原因。以【select * from student where age=33】查询语句为例。当我们不加索引的时候,会从上到下扫描源表,当扫描到第5行的时候,找到了我们想要找到了元素,一共是查询了5次。当添加了索引以后,就直接在树形结构中进行查找,33比50小,就从左侧查询到了23,33大于23,就又查询到了右侧,这下找到了33,整个索引结束,一共进行了3次查找。是不是很方便,假如我们此时需要查找age=62,你再想想“添加索引”前后,查找次数的变化情况。4)索引的弊端1.当数据量很大的时候,索引也会很大(当然相比于源表来说,还是相当小的),也需要存放在内存/硬盘中(通常存放在硬盘中),占据一定的内存空间/物理空间。2.索引并不适用于所有情况:a.少量数据;b.频繁进行改动的字段,不适合做索引;c.很少使用的字段,不需要加索引;3.索引会提高数据查询效率,但是会降低“增、删、改

      4、”的效率。当不使用索引的时候,我们进行数据的增删改,只需要操作源表即可,但是当我们添加索引后,不仅需要修改源表,也需要再次修改索引,很麻烦。尽管是这样,添加索引还是很划算的,因为我们大多数使用的就是查询,“查询”对于程序的性能影响是很大的。5)索引的优势1.提高查询效率(降低了IO使用率)。当创建了索引后,查询次数减少了。2.降低CPU使用率。比如说【order by age desc】这样一个操作,当不加索引,会把源表加载到内存中做一个排序操作,极大的消耗了资源。但是使用了索引以后,第一索引本身就小一些,第二索引本身就是排好序的,左边数据最小,右边数据最大。6)B+树图示说明MySQL中索引使用的就是B+树结构。关于B+树的说明:首先,Btree一般指的都是【B+树】,数据全部存放在叶子节点中。对于上图来说,最下面的第3层,属于叶子节点,真实数据部份都是存放在叶子节点当中的。那么对于第1、2层中的数据又是干嘛的呢?答:用于分割指针块儿的,比如说小于26的找P1,介于26-30之间的找P2,大于30的找P3。其次,三层【B+树】可以存放上百万条数据。这么多数据怎么放的呢?增加“节点数”

      5、。图中我们只有三个节点。最后,【B+树】中查询任意数据的次数,都是n次,n表示的是【B+树】的高度。3、索引的分类与创建1)索引分类单值索引唯一索引复合索引 单值索引利用表中的某一个字段创建单值索引。一张表中往往有多个字段,也就是说每一列其实都可以创建一个索引,这个根据我们实际需求来进行创建。还需要注意的一点就是,一张表可以创建多个“单值索引”。假如某一张表既有age字段,又有name字段,我们可以分别对age、name创建一个单值索引,这样一张表就有了两个单值索引。 唯一索引也是利用表中的某一个字段创建单值索引,与单值索引不同的是:创建唯一索引的字段中的数据,不能有重复值。像age肯定有很多人的年龄相同,像name肯定有些人是重名的,因此都不适合创建“唯一索引”。像编号id、学号sid,对于每个人都不一样,因此可以用于创建唯一索引。 复合索引多个列共同构成的索引。比如说我们创建这样一个“复合索引”(name,age),先利用name进行索引查询,当name相同的时候,我们利用age再进行一次筛选。注意:复合索引的字段并不是非要都用完,当我们利用name字段索引出我们想要的结果以后,就

      6、不需要再使用age进行再次筛选了。2)创建索引 语法语法:create 索引类型 索引名 on 表(字段);建表语句如下:查询表结构如下: 创建索引的第一种方式 创建单值索引createindexdept_indexontb(dept); 创建唯一索引:这里我们假定name字段中的值都是唯一的createuniqueindexname_indexontb(name); 创建复合索引createindexdept_name_indexontb(dept,name); 创建索引的第二种方式先删除之前创建的索引以后,再进行这种创建索引方式的测试;语法:alter table 表名 add 索引类型 索引名(字段) 创建单值索引altertabletbaddindexdept_index(dept); 创建唯一索引:这里我们假定name字段中的值都是唯一的altertabletbadduniqueindexname_index(name); 创建复合索引altertabletbaddindexdept_name_index(dept,name); 补充说明如果某个字段是primary key,

      7、那么该字段默认就是主键索引。主键索引和唯一索引非常相似。相同点:该列中的数据都不能有相同值;不同点:主键索引不能有null值,但是唯一索引可以有null值。3)索引删除和索引查询 索引删除语法:drop index 索引名 on 表名;dropindexname_indexontb; 索引查询语法:show index from 表名;showindexfromtb;结果如下:4、SQL性能问题的探索人为优化:需要我们使用explain分析SQL的执行计划。该执行计划可以模拟SQL优化器执行SQL语句,可以帮助我们了解到自己编写SQL的好坏。SQL优化器自动优化:最开始讲述MySQL执行原理的时候,我们已经知道MySQL有一个优化器,当你写了一个SQL语句的时候,SQL优化器如果认为你写的SQL语句不够好,就会自动写一个好一些的等价SQL去执行。SQL优化器自动优化功能【会干扰】我们的人为优化功能。当我们查看了SQL执行计划以后,如果写的不好,我们会去优化自己的SQL。当我们以为自己优化的很好的时候,最终的执行计划,并不是按照我们优化好的SQL语句来执行的,而是有时候将我们优化好的SQ

      8、L改变了,去执行。SQL优化是一种概率问题,有时候系统会按照我们优化好的SQL去执行结果(优化器觉得你写的差不多,就不会动你的SQL)。有时候优化器仍然会修改我们优化好的SQL,然后再去执行。1)查看执行计划语法:explain + SQL语句eg:explain select * from tb;2)“执行计划”中需要知道的几个“关键字”id :编号select_type :查询类型table :表type :类型possible_keys :预测用到的索引key :实际使用的索引key_len :实际使用索引的长度ref :表之间的引用rows :通过索引查询到的数据量Extra :额外的信息建表语句和插入数据:#建表语句createtablecourse(cidint(3),cnamevarchar(20),tidint(3);createtableteacher(tidint(3),tnamevarchar(20),tcidint(3);createtableteacherCard(tcidint(3),tcdescvarchar(200);#插入数据insertintocoursevalues(1,java,1);insertintocoursevalues(2,html,1);insertintocoursevalues(3,sql,2);insertintocoursevalues(4,web,3);insertintoteachervalues(1,tz,1);insertintoteachervalues(2,tw,2);insertintoteachervalues(3,tl,3);insertintoteacherCardvalues(1,tzdesc);insertintoteacherCardvalues(2,twdesc);insertintoteacherCardvalues(3,tldesc);explain执行

      《[全]SQL优化方法技巧实例大全》由会员赵****分享,可在线阅读,更多相关《[全]SQL优化方法技巧实例大全》请在金锄头文库上搜索。

      点击阅读更多内容
    最新标签
    监控施工 信息化课堂中的合作学习结业作业七年级语文 发车时刻表 长途客运 入党志愿书填写模板精品 庆祝建党101周年多体裁诗歌朗诵素材汇编10篇唯一微庆祝 智能家居系统本科论文 心得感悟 雁楠中学 20230513224122 2022 公安主题党日 部编版四年级第三单元综合性学习课件 机关事务中心2022年全面依法治区工作总结及来年工作安排 入党积极分子自我推荐 世界水日ppt 关于构建更高水平的全民健身公共服务体系的意见 空气单元分析 哈里德课件 2022年乡村振兴驻村工作计划 空气教材分析 五年级下册科学教材分析 退役军人事务局季度工作总结 集装箱房合同 2021年财务报表 2022年继续教育公需课 2022年公需课 2022年日历每月一张 名词性从句在写作中的应用 局域网技术与局域网组建 施工网格 薪资体系 运维实施方案 硫酸安全技术 柔韧训练 既有居住建筑节能改造技术规程 建筑工地疫情防控 大型工程技术风险 磷酸二氢钾 2022年小学三年级语文下册教学总结例文 少儿美术-小花 2022年环保倡议书模板六篇 2022年监理辞职报告精选 2022年畅想未来记叙文精品 企业信息化建设与管理课程实验指导书范本 草房子读后感-第1篇 小数乘整数教学PPT课件人教版五年级数学上册 2022年教师个人工作计划范本-工作计划 国学小名士经典诵读电视大赛观后感诵读经典传承美德 医疗质量管理制度 2
    关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
    手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
    ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.