sql优化的8种方式
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种方式的更多相关文章
- sql优化的8种方式 (下)
五.条件列表值如果连续使用between替代in 六.无重复记录的结果集使用union all合并 MySQL数据库中使用union或union all运算符将一个或多个列数相同的查询结 ...
- sql优化的几种方式
一.为什么要对SQL进行优化 我们开发项目上线初期,由于业务数据量相对较少,一些SQL的执行效率对程序运行效率的影响不太明显,而开发和运维人员也无法判断SQL对程序的运行效率有多大,故很少针对SQL进 ...
- 预处理(防止sql注入的一种方式)
<!--- 预处理(预编译) ---><?php/* 防止 sql 注入的两种方式: 1. 人为提高代码的逻辑性,使其变得更严谨,滴水不漏. 比如说 增加判断条件,增加输入过滤等,但 ...
- sql优化 表连接join方式
sql优化核心 是数据库中 解析器+优化器的工作,我觉得主要有以下几个大方面:1>扫表的方法(索引非索引.主键非主键.书签查.索引下推)2>关联表的方法(三种),关键是内存如何利用 ...
- Mybatis控制台打印SQL语句的两种方式
问题描述在使用mybatis进行开发的时候,由于可以动态拼接sql,这样大大方便了我们.但是也有一定的问题,当我们动态sql拼接的块很多的时候,我们要想从*mapper.xml中直接找出完整的sql就 ...
- sql优化的几种方法
在sql查询中为了提高查询效率,我们常常会采取一些措施对查询语句进行sql优化,下面总结的一些方法,有需要的可以参考参考. 1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 ord ...
- MySQL数据库优化的八种方式(经典必看)
引言: 关于数据库优化,网上有不少资料和方法,但是不少质量参差不齐,有些总结的不够到位,内容冗杂 偶尔发现了这篇文章,总结得很经典,文章流量也很大,所以拿到自己的总结文集中,积累优质文章,提升个人 ...
- MySQL数据库优化的八种方式
引言: 关于数据库优化,网上有不少资料和方法,但是不少质量参差不齐,有些总结的不够到位,内容冗杂 偶尔发现了这篇文章,总结得很经典,文章流量也很大,所以拿到自己的总结文集中,积累优质文章,提升个人能力 ...
- 性能优化——Android图片压缩与优化的几种方式
图片优化压缩方式大概可以分为以下几类:更换图片格式,质量压缩,采样率压缩,缩放压缩,调用jpeg压缩等1.设置图片格式Android目前常用的图片格式有png,jpeg和webp,png:无损压缩图片 ...
随机推荐
- sklearn模型保存与加载
sklearn模型保存与加载 sklearn模型的保存和加载API 线性回归的模型保存加载案例 保存模型 sklearn模型的保存和加载API from sklearn.externals impor ...
- Linux usb 3. Host 详解
文章目录 1. 简介 2. Usb Core 驱动设备模型 2.1 Usb Device Layer 2.1.1 device (struct usb_device) 2.1.2 driver (st ...
- Linux mem 2.4 Buddy 内存管理机制
文章目录 1. Buddy 简介 2. Buddy 初始化 2.1 Struct Page 初始化 2.2 Buddy 初始化 3. 内存释放 4. 内存分配 4.1 gfp_mask 4.2 nod ...
- 解决tomcat的404问题
遇到的问题 点击startup.bat启动tomcat启动成功,但在网页上输入local:8080却显示Access Error: 404 -- Not Found Cannot locate doc ...
- loto示波器实践——超声波测距模块
我们这里用到的超声波测距模块,一般是用于arduino智能小车自动避障的.经常见到的应用是使用单片机或者stm32和这种模块结合进行开发的. 我们使用LOTO示波器可以更直观和快速的看到超声波测量距离 ...
- Python使用cx_Oracle模块操作Oracle数据库--通过sql语句和存储操作
https://www.jb51.net/article/125160.htm?utm_medium=referral Python使用cx_Oracle调用Oracle存储过程的方法示例 http ...
- [源码解析] PyTorch分布式(6) -------- DistributedDataParallel -- 初始化&store
[源码解析] PyTorch分布式(6) ---DistributedDataParallel -- 初始化&store 目录 [源码解析] PyTorch分布式(6) ---Distribu ...
- 从0到1使用Kubernetes系列(八):Kubernetes安全
本文是从 0 到 1 使用 Kubernetes 系列第八篇,上一篇从0到1使用Kubernetes系列(七):网络介绍了 K8S 网络相关的内容,本文将带你了解 K8S 的安全问题. Kuberne ...
- [atARC070F]HonestOrUnkind
考虑当$a\le b$时,构造两种方案,满足诚实的人不交,接下来要求对于任意询问,这两种方案的答案都有可能相同 考虑询问$(i,j)$,若$i$在两种方案中有一种不诚实,那么总可以让答案相同,又因为诚 ...
- Ubuntu 软件安装
apt 使用apt安装,需要sudo 一些命令: sudo apt-get install git deb deb软件安装方法: sudo dpkg -I xxxx.deb 我们在Windows下安装 ...