在以前的博客中陆续记录了有关查询效率方面的文章。今天在整理一下,写上自己的一些心得记录如下:
常见查询慢的原因常见的话会有如下几种:
1、没有索引或没有用到索引。
PS:索引用来快速地寻找那些具有特定值的记录,所有MySQL索引都以B-树的形式保存。如果没有索引,执行查询时MySQL必须从第一个记录开始扫描整个表 的所有记录,直至找到符合要求的记录。表里面的记录数量越多,这个操作的代价就越高。如果作为搜索条件的列上已经创建了索引,MySQL无需扫描任何记录 即可迅速得到目标记录所在的位置。如果表有1000个记录,通过索引查找记录至少要比顺序扫描记录快100倍。
索引类型:
普通索引:这是最基本的索引类型,没唯一性之类的限制。
唯一性索引:和普通索引基本相同,但所有的索引列只能出现一次,保持唯一性。
主键:主键是一种唯一索引,但必须指定为"PRIMARY KEY"。
全文索引:MYSQL从3.23.23开始支持全文索引和全文检索。在MYSQL中,全文索引的索引类型为FULLTEXT。全文索引可以在VARCHAR或者TEXT类型的列上创建。
2、IO吞吐量小形成了瓶颈。
PS:这是从系统层来分析MYSQL是比较耗IO的。一般数据库监控也是比较关注IO。
监控命令:$iostat -d -k 1 10
参数 -d 表示,显示设备(磁盘)使用状态;-k某些使用block为单位的列强制使用Kilobytes为单位;1 10表示,数据显示每隔1秒刷新一次,共显示10次。
3、内存不足
监控内存使用:vmstat [-n] [延时[次数]]
Memory

swpd: 切换到交换内存上的内存(默认以KB为单位)
• 如果 swpd 的值不为0,或者还比较大,比如超过100M了,但是si, so 的值长期为0,这种情况我们可以不用担心,不会影响系统性能。
free: 空闲的物理内存
buff: 作为buffer cache的内存,对块设备的读写进行缓冲
cache: 作为page cache的内存, 文件系统的cache• 如果 cache 的值大的时候,说明cache住的文件数多,如果频繁访问到的文件都能被cache住,那么磁盘的读IO bi 会非常小。
4、网络速度慢
ping IP -t 查看是否有丢包。
5、一次查询的数据量过大。
比如没有分页查询,一次提取上万条记录。数据库有可能卡死。
6、出现死锁
所谓死锁: 是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去.
Show innodb status检查引擎状态 ,可以看到哪些语句产生死锁。
执行show  processlist找到死锁线程号.然后Kill processNo
7、返回了不必要的行或列
一般查询SQL语句一定要将字段明确指定。而不要使用*进行查询
8、注意UNion和UNion all 的区别。UNION all好
UNION在进行表链接后会筛选掉重复的记录,所以在表链接后会对所产生的结果集进行排序运算,删除重复的记录再返回结果。所以union all的效率肯定要高!
9、

最新文章

  1. rake :You have already activated rake 10.1.0
  2. IOS第17天(2,Quartz2D图片剪裁变圆行图,和截屏图片)
  3. MVC返回JSON数据格式书写方式
  4. hihocoder-1391&&北京网赛09 Countries(优先队列)
  5. vs2010把项目资源打包成系统资源
  6. Step-by-Step Guide to Portal Development for Microsoft Dynamics CRM - 摘自网络
  7. 在Linux下查看环境变量
  8. 最受欢迎web前端技术总结
  9. The Decoder - UVa458
  10. map & flatMap 浅析
  11. 删除MySQL二进制日志
  12. Linux 常见目录与区别
  13. 在服务器上实现SSH(Single Stage Headless)
  14. sopUI上手教程
  15. 将ActiveX打包成CAB发布的注意事项
  16. ES6的Proxy和Reflect
  17. mysql left join的深入探讨
  18. Java各个版本的新特性
  19. js记录
  20. Hadoop学习之路(十五)MapReduce的多Job串联和全局计数器

热门文章

  1. bzoj 5498: [2019省队联测]皮配【dp】
  2. poj 3734 Blocks【指数型生成函数】
  3. 力荐!35 个最好用的 Vue 开源库!
  4. Flexbox布局的基本概念
  5. 目标&计划
  6. Android课程设计第四天ListView运用
  7. SPRING-BOOT系列之Spring4快速入门
  8. iOS中自定义UITableViewCell的用法
  9. 转 Oracle中merge into的使用
  10. (026)[工具软件]剪切板管理:Ditto