SQL优化的思路:
 1.优化更需要优化的sql;
 2.定位优化对象的性能瓶颈:优化前需了解查询的瓶颈是IO还是CPU,可通过PROFILING很容易定位查询的瓶颈。
 3.明确优化目标;
 4.从Explain入手;
 5.多使用profile;

SQL优化的基本原则:
 1.永远用小结果集驱动大结果集;
    From子句中sql解析顺序为从右向左,执行时会以最左边的表为基础表循环与右边表数据做笛卡尔积,所以以小结果集驱动能减少循环次数,从而减少对被驱动结果集的访问,从而减少被驱动表的锁定。
 2.尽可能在索引中完成排序;
    排序算法有两种:a.查出排序字段和行指针,排序,再通过行指针获得行数据所需列,返回结果集;b.取出所有排序列数据,在排序缓冲区中排完序直接返回结果集。
    索引排序是利用索引的有序性对数据排序的。
 3.只取出子集需要的colums
 4.仅仅使用最有效的过滤条件;
 5.尽可能避免复杂的Join和子查询;

索引的好处:
(1).提高数据检索效率,降低数据库的IO成本。
(2).降低数据排序成本:要求排序字段和索引键字段一致。
(3).降低数据分组成本:因为分组之前会先排序,同意如果分组字段与索引字段一致,会降低分组消耗的成本。
索引的弊端:
(1).索引是独立于基础数据的数据库对象,因此它会占用存储空间。
(2).数据新增、更新会导致索引的同步更新,所以会增加数据新增、更新所消耗的成本。
判断是否需要创建索引:
(1).较为频繁的作为查询条件的字段需要创建索引;
(2). 唯一性太差的字段不适合单独创建索引,即使频繁作为查询条件;
(3).更新非常频繁的字段不适合创建索引;
(4).不会出现在where子句中的字段不要创建索引;

索引语法:
(1).唯一索引
     ALTER TABLE tableName ADD UNIQUE indexName (column);
     CREATE UNIQUE INDEX indexName ON tableName (column);
(2).普通索引
     ALTER TABLE tableName ADD INDEX indexName(column);
     CREATE INDEX indexName ON tableName(column);
(3).主键索引
     ALTER TABLE tableName ADD PRIMARY KEY (column);
(4).全文索引
     ALTER TABLE tableName ADD FULLTEXT (column);
(5).组合索引
     ALTER TABLE tableName ADD INDEX indexName(col1,col2,...);
     

最新文章

  1. 使用 WPF+ ASP.NET MVC 开发 在线客服系统 (一)
  2. OpenCV,计算两幅图像的单应矩阵
  3. 深入理解javascript原型和闭包(1)——一切都是对象
  4. Swift与OC混编
  5. Azure 媒体服务可将优质内容传输至 Apple TV
  6. ASSIC码对照表
  7. 斐波那契堆(一)之 图文解析 和 C语言的实现
  8. android Init 相关分析
  9. JDBC第四次学习
  10. DWZ (JUI) 教程 table 排序
  11. crawler spec
  12. Redis的Time Event与File Event的微妙关系
  13. js 等待刷新技术
  14. Asp.Net 构架(Http Handler 介绍) - Part.2
  15. html5新特性--音频视频,拖放
  16. 你想不到的IT运维前途
  17. IO的五种模型
  18. UVa11426 最大公约数之和(正版)
  19. windows.go
  20. jexus上部署nuget私服vs访问403错误解决方式

热门文章

  1. 并查集图冲突hdu1272
  2. 创建quickstart报错
  3. 【待解决】使用JUnit时报错java.lang
  4. DRP——重定向与转发
  5. C++静态变量本身可否是一个实例对象
  6. Docker修改hosts方法
  7. 5个对话框和FileStream:文件流
  8. Codeforces Round #450
  9. java MD5加密的工具类
  10. Matplotlib库常用函数大全