1.设置索引。

MySQL索引操作:
给表列创建索引:

    • 建表时创建索引:

    • create table t(id int,name varchar(20),index idx_name (name));

    • 给表追加索引:

    • alter table t add unique index idx_id(id);

    • 给表的多列上追加索引

    • alter table t add index idx_id_name(id,name);
      或者:

    • create index idx_id_name on t(id,name);

    • 查看索引

      • 使用show语句查看t表上的索引:

      • show index from t;
        或者:

      • show keys from t;–mysql中索引也被称作keys 

      • 使用show create table语句查看索引:

      • show create table t\G

        • 删除索引:

        • 使用alter table命令删除索引:

        • alter table 表 drop index 索引名

        • 使用drop index命令删除索引:

        • drop index 索引名 on 表

          • 索引原理:
            例如一个学生信息表,我们设置学号(stu_id)为索引:

            索引页之间存在一定的关联关系,一般为树形结构;分为根节点、分支节点、和叶子节点
            根节点页中存放分段stu_id的起始值,以及值所对应的分支索引页号
            分支索引页中存放分段stu_id的起始值,以及值所对应的叶子索引页号
            叶子索引页中存放排序后的stu_id值,该值所对应的表页号, 下一个叶子索引页的页号.

          • 2.使用EXPLAIN 来查看你的 SELECT 查询
          • 关于MySQL服务器是如何执行SQL语句的相关信息可以用explain语句来查看,可以用explain语句查看执行过程的语句主要有select、insert、update、delete等,其使用方式是explain后接具体的增删改查SQL语句。
            例如:explain select * from test.t; 其返回形式为数据表,如下图所示:
          • 其中每个字段代表的含义如下:

          • 三、不要使用表达式作为查询条件
          • 使用采用表达式的方式作为查询条件,条件列中的索引会失效,即便返回行数非常少,优化器也会使用低效的全表扫方式来解析SQL语句;如果同样效果的语句采用方式二的写法,索引不会失效,查询效率高。

            发生这种事情的深层原因在于:
            大多数的MySQL服务器都开启了查询缓存。这是提高性最有效的方法之一,而且这是被MySQL的数据库引擎处理的。当有很多相同的查询被执行了多次的时候,这些查询结果会被放到一个缓存中,这样,后续的相同的查询就不用操作表而直接访问缓存结果了。但是当使用表达式的时候,就会不使用缓存,因为这些函数的返回是会不定的易变的

          • 四、尽量使用in运行符来替代or运算
          • 比较以下两种SQL语句书写方式,比较运行时间:
            方式一:select * from t where id=1 or id=2 or id=3;
            方式二:select * from t where id in (1,2,3);

            由于t表id列已添加索引,可以使用MySQL自带压力测试工具mysqlslap,增加并发用户数量和查询次数比较两种方式的运行效率。

            mysqlslap命令常用选项如下所示:
            -u:连接数据库用户名
            -p:链接数据库密码
            -concurrency:并发谅解客户端数量
            -query:运行的测试SQL语句
            -create-schema:测试SQL语句所在数据库
            -number-of-queries:所有链接客户端运行测试SQL语句的次数
            -itreations:本次测试的重复执行次数
            将方式一和方式二的SQL语句,使用mysqlslap进行测试,采用100个并发客户端,所有客户端一共运行5000次,可以写成以下方式:

            方式一:
            mysqlslap -uroot -p --create-schrma=test --query=‘select * from t where id=1 or id=2 or id=3’ --concurrency=100 --number-of-queries=5000

            方式二:
            mysqlslap -uroot -p --create-schema=test --query=‘select * from t where id in (1,2,3)’ --concurrency=100 --number-of-queries=5000

            测试结果如下:

            从实验结果可以看出,SQL语句采用方式一的or方式50个并发用户执行5000次查询所用的时间为1.09秒;SQL语句采用方式二的in方式50个并发用户执行5000次查询所用的时间为0.93秒,在写法等效的情况下,使用IN来替代OR效率更高。

sql优化的8种方式的更多相关文章

  1. sql优化的8种方式 (下)

    五.条件列表值如果连续使用between替代in        六.无重复记录的结果集使用union all合并 MySQL数据库中使用union或union all运算符将一个或多个列数相同的查询结 ...

  2. sql优化的几种方式

    一.为什么要对SQL进行优化 我们开发项目上线初期,由于业务数据量相对较少,一些SQL的执行效率对程序运行效率的影响不太明显,而开发和运维人员也无法判断SQL对程序的运行效率有多大,故很少针对SQL进 ...

  3. 预处理(防止sql注入的一种方式)

    <!--- 预处理(预编译) ---><?php/* 防止 sql 注入的两种方式: 1. 人为提高代码的逻辑性,使其变得更严谨,滴水不漏. 比如说 增加判断条件,增加输入过滤等,但 ...

  4. sql优化 表连接join方式

        sql优化核心 是数据库中 解析器+优化器的工作,我觉得主要有以下几个大方面:1>扫表的方法(索引非索引.主键非主键.书签查.索引下推)2>关联表的方法(三种),关键是内存如何利用 ...

  5. Mybatis控制台打印SQL语句的两种方式

    问题描述在使用mybatis进行开发的时候,由于可以动态拼接sql,这样大大方便了我们.但是也有一定的问题,当我们动态sql拼接的块很多的时候,我们要想从*mapper.xml中直接找出完整的sql就 ...

  6. sql优化的几种方法

    在sql查询中为了提高查询效率,我们常常会采取一些措施对查询语句进行sql优化,下面总结的一些方法,有需要的可以参考参考. 1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 ord ...

  7. MySQL数据库优化的八种方式(经典必看)

      引言: 关于数据库优化,网上有不少资料和方法,但是不少质量参差不齐,有些总结的不够到位,内容冗杂 偶尔发现了这篇文章,总结得很经典,文章流量也很大,所以拿到自己的总结文集中,积累优质文章,提升个人 ...

  8. MySQL数据库优化的八种方式

    引言: 关于数据库优化,网上有不少资料和方法,但是不少质量参差不齐,有些总结的不够到位,内容冗杂 偶尔发现了这篇文章,总结得很经典,文章流量也很大,所以拿到自己的总结文集中,积累优质文章,提升个人能力 ...

  9. 性能优化——Android图片压缩与优化的几种方式

    图片优化压缩方式大概可以分为以下几类:更换图片格式,质量压缩,采样率压缩,缩放压缩,调用jpeg压缩等1.设置图片格式Android目前常用的图片格式有png,jpeg和webp,png:无损压缩图片 ...

随机推荐

  1. docker添加sudo权限

    sudo groupadd docker  # 添加group sudo gpasswd -a think docker  # 添加用户到组 sudo service docker restart n ...

  2. Java设计模式之(四)——原型模式

    1.什么是原型模式 Specify the kinds of objects to create using a prototypical instance,and create new object ...

  3. Exploring Matrix

    import java.util.Scanner; public class J714 { /** * @taking input from user */ public static void ma ...

  4. [atARC123F]Insert Addition

    前置知识 下面,先来介绍一下Stern-Brocot Tree的结构: 其是一棵满二叉树,每一个节点都是一个最简分数,其中根为$\frac{1}{1}$ 假设前$i$层的中序遍历分数依次为$\frac ...

  5. [cf674E]Bear and Destroying Subtrees

    令$f_{i,j}$表示以$i$为根的子树中,深度小于等于$j$的概率,那么$ans_{i}=\sum_{j=1}^{dep}(f_{i,j}-f_{i,j-1})j$ 大约来估计一下$f_{i,j} ...

  6. [luogu1438]无聊的数列

    考虑令$b_{i}=a_{i+1}-a_{i}$,那么1操作相当于对L加上K,对(L,R]区间加上D,对R+1减去K+(R-L)*D,然后询问区间和即可 1 #include<bits/stdc ...

  7. [loj3341]时代的眼泪

    题意即求在区间$[l,r]$中且权值在$[x,y]$中的逆序对个数 考虑分块,逆序对个数包含4部分: 1.左/右块外内部,预处理出$i$到其所在块的块首/尾,小于/小于等于$j$(需要对$j$离散)的 ...

  8. 听说你想把对象存储当 HDFS 用,我们这里有个方案...

    传统的大数据集群往往采用本地中心化的计算和存储集群.比如在谷歌早期的[三驾马车]中,使用 GFS 进行海量网页数据存储,用 BigTable 作为数据库并为上层提供各种数据发现的能力,同时用 MapR ...

  9. 【Azure 应用服务】App Service 无法连接到Azure MySQL服务,报错:com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure

    问题描述 App Service使用jdbc连接MySQL服务,出现大量的  Communications link failure: com.mysql.cj.jdbc.exceptions.Com ...

  10. webpack--css、html 和 js 代码的常用处理

    前言 本文来总结下webpack中 css.js.html 代码常见的处理方式,学习笔记仅供参考. 正文 1.css样式文件处理 (1)提取css为一个单独的文件 在我们前面学习了webpack的基础 ...