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,...);
     

SQL优化的思路及基本原则(mysql)的更多相关文章

  1. SQL优化没思路,智能优化工具来帮你

    前言 作为DBA或系统管理员,我们有时会遇到一个慢SQL需要优化,但是通过分析执行计划又没有找到好的优化思路,或者优化之后效果不明显,没有达到自己理想的预期,此时的你是不是很焦虑?此时你一定想如果有一 ...

  2. 浅谈关于SQL优化的思路

    零.为什么要优化 系统的吞吐量瓶颈往往出现在数据库的访问速度上 随着应用程序的运行,数据库的中的数据会越来越多,处理时间会相应变慢 数据是存放在磁盘上的,读写速度无法和内存相比 一.观察 MySQL优 ...

  3. SQL优化技巧

    我们开发的大部分软件,其基本业务流程都是:采集数据→将数据存储到数据库中→根据业务需求查询相应数据→对数据进行处理→传给前台展示.对整个流程进行分析,可以发现软件大部分的操作时间消耗都花在了数据库相关 ...

  4. SQL优化-如何分析性能瓶颈

    MySQL优化一览图 笔者将优化分为了两大类:软优化和硬优化.软优化一般是操作数据库即可:而硬优化则是操作服务器硬件及参数设置. 1.软优化 1)查询语句优化 首先我们可以用EXPLAIN或DESCR ...

  5. 对SQL 优化,提升性能!

    对SQL 进行优化能够有效提高SQL 语句的执行效率,降低系统资源开销,是开发者提高后端系统处理能力的首选方案. 新产品上线后,随着运营推广活动的开始,业务进入快速增长期,数据库作为后端系统唯一或者主 ...

  6. 关于SQL优化的辟谣

    列举一些关于 SQL 语句的谣言,避免一些生瓜蛋子面试的时候被另外一群生瓜蛋子的 SQL 优化宝典给坑了. 以下所有内容都是 SQL Server 中的,其他数据库只能参考和借鉴 一.全表扫描 全表扫 ...

  7. MySQL 数据库性能优化之SQL优化

    前言 有人反馈之前几篇文章过于理论缺少实际操作细节,这篇文章就多一些可操作性的内容吧. 注:这篇文章是以 MySQL 为背景,很多内容同时适用于其他关系型数据库,需要有一些索引知识为基础. 优化目标 ...

  8. mysql数据库sql优化

    此文章为转载 一. 前提 这里的原则 只是针对mysql数据库,其他的数据库 某些是殊途同归,某些还是存在差异.我总结的也是mysql普遍的规则,对于某些特殊情况得特殊对待.在构造sql语句的时候养成 ...

  9. 我的mysql数据库sql优化原则

    原文 我的mysql数据库sql优化原则 一.前提 这里的原则 只是针对mysql数据库,其他的数据库 某些是殊途同归,某些还是存在差异.我总结的也是mysql普遍的规则,对于某些特殊情况得特殊对待. ...

随机推荐

  1. Codeforces Round #377 (Div. 2) D. Exams

    Codeforces Round #377 (Div. 2) D. Exams    题意:给你n个考试科目编号1~n以及他们所需要的复习时间ai;(复习时间不一定要连续的,可以分开,只要复习够ai天 ...

  2. 编写MyLayer,2 锚点,3 精灵的创建,4 zorder

     1 编写MyLayer 头文件:MyLayer.h #include "cocos2d.h" USING_NS_CC;   //代表的是: using namespace c ...

  3. NS3网络仿真(3): NetAnim

    快乐虾 http://blog.csdn.net/lights_joy/ 欢迎转载,但请保留作者信息 在NS3提供的演示样例first.py中,并没有生成NetAnim所须要的xml文件,本节我们尝试 ...

  4. contest hunter5105 Cookies

    神题 先按贪婪值大到小排序,根据贪心的思想g[i]越大a[i]也越大(这个微扰可以证,给个提示,a>b且c<d 则 (a-b)(c-d)<0 则 ac+bd<ad+bc) DP ...

  5. java怎么学

    java怎么学 给你推荐一个写得非常用心的Java基础教程:Java入门基础教程 | 天码营 这个教程将Java的入门基础知识贯穿在一个实例中,逐步深入,可以帮助你快速进入Java编程的世界.万事开头 ...

  6. 实现第三方登录(QQ、微信、微博)

    第三方登录,就是使用大家比较熟悉的比如QQ.微信.微博等第三方软件登录自己的网站,这可以免去注册账号.快速留住用户的目的,免去了相对复杂的注册流程.下边就给大家讲一下怎么使用PHP开发QQ登录的功能. ...

  7. ShowDialog函数与Form的Activated函数同时使用的陷阱

    当我们需要在form启动之时,焦点显示在特定的控件“btn”上,我们可以先将btn的TabIndex设为0,然后要确保它visible=true,最后在Form的Activated事件方法中btn.G ...

  8. MSDN性能分析相关网站收集

    Visual Studio 性能分析初学者指南 | Microsoft Docshttps://docs.microsoft.com/zh-cn/visualstudio/profiling/begi ...

  9. 无序列表属性 隐藏方式 JS简介

    今天考试了,整理一下错题. 1.无序列表的属性 list-style 分为三小类 (1)list-style-type none:无标记. disc:实心圆(默认). circle:空心圆. squa ...

  10. TensorFlow-mnist

    训练代码: from __future__ import absolute_import from __future__ import division from __future__ import ...