50-Mysql优化.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
大型网站优化-MySQL优化 执行计划 MySQL提供一种行为分析工具,可以使用它来查看MySQL执行SQL语句的一个行为。 大概可以看到MySQL将如何使用索引来查找数据,或者MySQL使不使用索引来查询。 MySQL执行概图:在生成最终的执行树的时候,去查看MySQL使用了那个索引,或者怎么使用索引。 具体使用: 在查询语句中,在前面加上关键字 explain或者同义词desc # explain select * from tableName where id = ID; 简单分析: 使用主键索引:使用主键索引查找后,快速定位(1) 1. const 最好出现这个,这个是最优。 未使用索引:进行全表扫描(300024) 分析type列: range : 如果是范围查询,并且数据量小的时候,MySQL会使用索引快速的定位。 思考:范围查询为什么会使用索引? 因为索引是一种排好序的数据结构,既然是拍好序的,那么查找范围是不是非常快。 因为范围可以直接冲拍好序的索引中取出来,取出来之后也是有序的。 【注意】:当MySQL认为查询的数据量超过表中的20%时候,可能就不使用索引了。 ref 代表使用非主键的索引。也是非常好的。 all:代表没有是索引 index:代表直接使用索引获取索引里面的信息。这个只是比ALL好一点点。 最好的 如果出现 system, null 级别最好。 type可能出现的关键字 const 最好的,常量级别,当使用primary key的时候,会出现。 ref 也是使用了索引,但是是非主键索引。 range 代表使用了范围,并且还是需要在小范围内。 index 代表使用索引内的索引数据 all 代表全表扫描,没有索引 如果出现system或者null,代表MySQL优化的最好了 注意:当查询的信息不存在的时候,MySQL也会非常快。因为维持了一张常量表。 手册: 使用细节 等值匹配 范围匹配,小范围 左前缀特性(面试必问) 在执行如下SQL语句: # select * from tableName where first_name like “%asdas”; 不会使用索引 # select * from tableName where first_name like “a%”; 可以使用索引 # select * from tableName where first_name like “a%b”; 可以使用索引 独立的列 在执行SQL语句的时候,查询字段是不能使用运算符操作,或者函数处理。 # select * from tableName where emp_no+1 = 3; 所以一般把表达式放在等号的右侧执行,这个时候可以使用上索引。 使用场景 面试问题: 什么样的字段适合建立索引? 答:1. 在where条件后面频繁使用的字段适合建立索引。X 正确:一般来说,在where条件后面的字段适合建立索引,并且,在排序、分组的字段后面也可以建立索引。因为索引是排好序的快速查找结构。 # select * from tableName order by emp_no desc limit 10; MySQL优化一般思路? 答:首先在做MySQL优化的时候,先做一些测试,测试MySQL服务器的一个整体性能(CPU、内存、磁盘读写),需要开启MySQL一个慢查询,运行一段时间(一个星期,一个月不等) 可以通过前面的慢查询把对应SQL语句找出来。在通过profile 可以做一个详细的分析,分析出问题的所在。一般都是在:1. 索引使用不当。独立列 2. 索引本身建的就不合理 解决方案:使用不当的SQL语句做重写的编写。索引建立的不合适的话,就删除之后,新建一个合适的索引。使用一个工具来具体的分析(explain工具)。在重复上面的一个过程,往返的测试。 测试服务器性能 开启慢查询,定位SQL语句 开启profile分析SQL语句 修改SQL语句或者索引 使用explain工具做出分析 重复这个过程 什么是索引覆盖? 在执行select操作的时候,查询的字段正好在索引文件里面出现了,这个时候字段信息可以直接从索引中获取,没有必要冲磁盘上读取。 在使用复合索引(对多个字段建立索引)的时候,需要特别注意: 过河 # alter table tableName add index(first_name,last_name); 简单的说,就是在过河的时候,桥上有你需要的数据,你就可以直接拿到这个数据,然后返回,没必要过河(到磁盘文件获取数据) 对于复合索引来说,必

文档评论(0)

精品文库 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档