SQL优化的N种方法(小结)
1.SQL语句中IN包含的值不应过多:
例如:select id from handsome where number in(1,2,3) 对于连续的数值,能用between就不要用in了。
2.SELECT语句务必指明字段名称:
禁止用 * 来查询 ,禁止用 * 来查询 ,禁止用 * 来查询 ,重要的事情说三遍, 查找哪个字段,就写具体的字段。
3.只查询一条数据的时候,使用limit 1
【这个很有用】
4.避免在where子句中对字段进行null值判断
5.避免在where子句中对字段进行表达式操作:
select id from user WHERE id*100=500;
上面的sql对字段就行了算术运算,这会造成引擎放弃使用索引,建议改成:
select id from user WHERE id=500/100;
6.对于联合索引来说,要遵守最左前缀法则:
例如组合索引(id,name,sex) 使用的时候,可以id 或者id,name 。禁止直接name,或者sex会导致联合索引失败
注意: id, name,sex 这三个字段填写顺序不会有影响, mysql会自动优化成最左匹配的顺序
前三条sql都能命中索引,中间两条由于不符合最左匹配原则,索引失效
最后一条sql 由于有最左索引id 所以索引部分成功,部分失效. id字段索引使用成功
explain select * from `user_test` where uid=10 ; explain select * from `user_test` where uid=10 and name='识时务者'; explain select * from `user_test` where uid=10 and name='识时务者' and phone='13047967256'; explain select * from `user_test` where name='识时务者' and phone='13047967256'; explain select * from `user_test` where name='识时务者'; explain select * from `user_test` where uid=10 and phone='13047967256';
7.尽量使用inner join,避免left join:
如果连接方式是inner join,在没有其他过滤条件的情况下MySQL会自动选择小表作为驱动表,但是left join在驱动表的选择上遵循的是左边驱动右边的原则,即left join左边的表名为驱动表。
8.注意范围查询语句:
对于联合索引来说,如果存在范围查询,比如between、>、<等条件时,会造成后面的索引字段失效。
解决办法: 业务允许的情况下,使用 >= 或者<= 这样不影响索引的使用
9.不建议使用%前缀模糊查询:
例如 : LIKE“%name”或者LIKE“%name%”,这种查询会导致索引失效而进行全表扫描。但是可以使用LIKE “name%”。
10.在 where 子句中使用 or 来连接条件,如果or连接的条件有一方没有索引,将导致引擎放弃使用索引而进行全表扫描
解决办法: 将or连接的双方都建立索引,就可以使用
11.应尽量避免在where子句中对字段进行函数操作,这将导致引擎放弃使用索引而进行全表扫描
12.字符串类型的字段 查询的时候如果不加引号’’ ,会导致自动进行隐式转换,然后索引失效
到此这篇关于SQL优化的N种方法(小结)的文章就介绍到这了,更多相关SQL 优化内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!
相关推荐
-
mysql优化配置参数
第一种 复制代码 代码如下: #This File was made using the WinMySQLAdmin 1.4 Tool #2004-2-23 16:28:14 #Uncomment or Add only the keys that you know how works. #Read the MySQL Manual for instructions [mysqld] basedir=D:/mysql #bind-address=210.5.*.* datadir=D:/mysq
-
MYSQL性能优化分享(分库分表)
1.分库分表 很明显,一个主表(也就是很重要的表,例如用户表)无限制的增长势必严重影响性能,分库与分表是一个很不错的解决途径,也就是性能优化途径,现在的案例是我们有一个1000多万条记录的用户表members,查询起来非常之慢,同事的做法是将其散列到100个表中,分别从members0到members99,然后根据mid分发记录到这些表中,牛逼的代码大概是这样子: 复制代码 代码如下: <?php for($i=0;$i< 100; $i++ ){ //echo "CREATE TA
-
MySQL优化必须调整的10项配置
当我们被人雇来监测MySQL性能时,人们希望我们能够检视一下MySQL配置然后给出一些提高建议.许多人在事后都非常惊讶,因为我们建议他们仅仅改动几个设置,即使是这里有好几百个配置项.这篇文章的目的在于给你一份非常重要的配置项清单. 我们曾在几年前在博客里给出了这样的建议,但是MySQL的世界变化实在太快了!写在开始前-即使是经验老道的人也会犯错,会引起很多麻烦.所以在盲目的运用这些推荐之前,请记住下面的内容: 一次只改变一个设置!这是测试改变是否有益的唯一方法. 大多数配置能在运行时使用SET
-
优化Mysql数据库的8个方法
1.创建索引对于查询占主要的应用来说,索引显得尤为重要.很多时候性能问题很简单的就是因为我们忘了添加索引而造成的,或者说没有添加更为有效的索引导致.如果不加索引的话,那么查找任何哪怕只是一条特定的数据都会进行一次全表扫描,如果一张表的数据量很大而符合条件的结果又很少,那么不加索引会引起致命的性能下降.但是也不是什么情况都非得建索引不可,比如性别可能就只有两个值,建索引不仅没什么优势,还会影响到更新速度,这被称为过度索引.2.复合索引比如有一条语句是这样的:select * from users
-
MySQL 索引分析和优化
一.什么是索引? 索引用来快速地寻找那些具有特定值的记录,所有MySQL索引都以B-树的形式保存.如果没有索引,执行查询时MySQL必须从第一个记录开始扫描整个表的所有记录,直至找到符合要求的记录.表里面的记录数量越多,这个操作的代价就越高.如果作为搜索条件的列上已经创建了索引,MySQL无需扫描任何记录即可迅速得到目标记录所在的位置.如果表有1000个记录,通过索引查找记录至少要比顺序扫描记录快100倍. 假设我们创建了一个名为people的表: CREATE TABLE people ( p
-
SQLite优化方法
例如:向数据库中插入100万条数据,在默认的情况下如果仅仅是执行 sqlite3_exec(db, "insert into name values 'lxkxf', '24'; ", 0, 0, &zErrMsg); 将会重复的打开关闭数据库文件100万次,所以速度当然会很慢.因此对于这种情况我们应该使用"事务". 具体方法如下:在执行SQL语句之前和SQL语句执行完毕之后加上 rc = sqlite3_exec(db, "BEGIN;"
-
MySQL 性能优化的最佳20多条经验分享
当我们去设计数据库表结构,对操作数据库时(尤其是查表时的SQL语句),我们都需要注意数据操作的性能.这里,我们不会讲过多的SQL语句的优化,而只是针对MySQL这一Web应用最多的数据库.希望下面的这些优化技巧对你有用. 1. 为查询缓存优化你的查询 大多数的MySQL服务器都开启了查询缓存.这是提高性最有效的方法之一,而且这是被MySQL的数据库引擎处理的.当有很多相同的查询被执行了多次的时候,这些查询结果会被放到一个缓存中,这样,后续的相同的查询就不用操作表而直接访问缓存结果了. 这里最主要
-
MYSQL 优化常用方法
1.选取最适用的字段属性 MySQL可以很好的支持大数据量的存取,但是一般说来,数据库中的表越小,在它上面执行的查询也就会越快.因此,在创建表的时候,为了获得更好的性能,我们可以将表中字段的宽度设得尽可能小.例如,在定义邮政编码这个字段时,如果将其设置为CHAR(255),显然给数据库增加了不必要的空间,甚至使用VARCHAR这种类型也是多余的,因为CHAR(6)就可以很好的完成任务了.同样的,如果可以的话,我们应该使用MEDIUMINT而不是 BIGIN来定义整型字段. 另外一个提高效率的方法
-
SQL优化的N种方法(小结)
1.SQL语句中IN包含的值不应过多: 例如:select id from handsome where number in(1,2,3) 对于连续的数值,能用between就不要用in了. 2.SELECT语句务必指明字段名称: 禁止用 * 来查询 ,禁止用 * 来查询 ,禁止用 * 来查询 ,重要的事情说三遍, 查找哪个字段,就写具体的字段. 3.只查询一条数据的时候,使用limit 1 [这个很有用] 4.避免在where子句中对字段进行null值判断 5.避免在where子句中对字段进行
-
MySQL导入sql文件的三种方法小结
目录 一.使用工具Navicat for MySQL导入 1.打开localhost_3306,选中右击“新建数据库” 2.指定数据库名和字符集(可根据sql文件的字符集类型自行选择) 3.选中数据库下的表运行SQL文件 4.选中路径导入 二.使用官方工具MySQL Workbench导入 1.第一种方法 2.第二种方法 三.使用命令行导入 总结 一.使用工具Navicat for MySQL导入 工具的具体下载及使用方法推荐的一篇文章:https://www.jb51.net/article/
-
SQL Server 常用函数使用方法小结
之前就想要把一些 SQL 的常用函数记录下来,不过一直没有实行...嘿嘿... 直到今天用到substring()这个函数,C# 里面这个方法起始值是 0,而 SQL 里面起始值是 1.傻傻分不清楚... 这篇博客作为记录 SQL 的函数的使用方法,想到哪里用到哪里就写到哪里... SubString():用于截取指定字符串的方法.该方法有三个参数: 参数1:用于指定要操作的字符串. 参数2:用于指定要截取的字符串的起始位置,起始值为 1 . 参数3:用于指定要截取的长度. select sub
-
Java和scala实现 Spark RDD转换成DataFrame的两种方法小结
一:准备数据源 在项目下新建一个student.txt文件,里面的内容为: 1,zhangsan,20 2,lisi,21 3,wanger,19 4,fangliu,18 二:实现 Java版: 1.首先新建一个student的Bean对象,实现序列化和toString()方法,具体代码如下: package com.cxd.sql; import java.io.Serializable; @SuppressWarnings("serial") public class Stude
-
C++连接mysql数据库的两种方法小结
现在正做一个接口,通过不同的连接字符串操作不同的数据库.要用到mysql数据库,以前没用过这个数据库,用access和sql server比较多.通过网上的一些资料和自己的摸索,大致清楚了C++连接mysql的方法.可以通过2种方法实现. 第一种方法是利用ADO连接, 第二种方法是利用mysql自己的api函数进行连接. 第一种方法可以实现我当前的需求,通过连接不同的字符串来连接不同的数据库.暂时只连接了mysql,sqlserver,oracle,access.对于access,因为它创建表的
-
实现Servlet程序的三种方法(小结)
实现Servlet程序的三种方法 1.手动实现Servlet程序 1.编写一个类去实现Servlet接口 2.实现service方法,处理请求并响应数据 示例代码: //HelloServlet.java package servlet; import javax.servlet.*; import java.io.IOException; public class HelloServlet implements Servlet { @Override public void init(Serv
-
Java中List分片的5种方法小结
目录 简介 1.Google Guava 2.apache commons 3.Hutool 4.JDK 5.自定义分片 总结 前些天在实现 MyBatis 批量插入时遇到了一个问题,当批量插入的数据量比较大时,会导致程序执行报错,如下图所示: 原因是 MySQL 只能执行一定长度的 SQL 语句,但当插入的数据量较多时,会生成一条很长的 SQL,这样程序在执行时就会报错. 要解决这个问题,有两种方法:第一,设置 MySQL 可以执行 SQL 的最大长度:第二,将一个大 List 分成 N 个小
-
js中将多个语句写成一个语句的两种方法小结
Javascript 中将多个语句写成一个语句的两种方法小结一.使用逗号运算符将多个语句写成一个语句 1.一次声明多个变量 var i=1,j=1,k=1 2.多个语句用逗号间隔 i=1,j=i+2,k=j+2 二.使用花括号将多个语句写成一个语句 if语句.while语句.do/while语句.for语句.for/in语句和function语句等语句后都只能跟随一个子语句,此时可以用{和}将多条语句围起来变成一个语句. 复制代码 代码如下: if(username==null)
-
jquery的ajax提交form表单的两种方法小结(推荐)
jquery的ajax提交form表单的两种方法小结(推荐) 方法一: function AddHandlingFeeToRefund() { var AjaxURL= "../OrderManagement/AjaxModifyOrderService.aspx"; alert($('#formAddHandlingFee').serialize()); $.ajax({ type: "POST", dataType: "html", url:
-
遍历json获得数据的几种方法小结
Json在Web开发的用处非常广泛,作为数据传递的载体,如何解析Json返回的数据是非常常用的.下面介绍下四种解析Json的方式: Part 1 var list1 = [1,3,4]; alert(list1[1]); var list2 = [{"name":"leamiko","xing":"lin"}]; alert(list2[0]["xing"]) alert(list2[0].xing) Pa
随机推荐
- Angular中ng-bind和ng-model的区别实例详解
- ADODB连接access是出现 80004005 错误的解决方法
- ASP.NET中TextBox使用Ajax控件显示日期不全的问题解决方法
- Vue组件BootPage实现简单的分页功能
- javascript removeChild 使用注意事项
- javascript动态控制服务器控件实例
- js设置cookie过期及清除浏览器对应名称的cookie
- ASP.NET中Application全局对象用法实例浅析
- python3中bytes和string之间的互相转换
- Java利用数组随机抽取幸运观众如何实现
- Python中Collections模块的Counter容器类使用教程
- 微信JSSDK调用微信扫一扫功能的方法
- 使用PyCharm配合部署Python的Django框架的配置纪实
- MySQL数学函数简明总结
- Jquery 数组操作大全个人总结
- Jquery中.bind()、.live()、.delegate()和.on()之间的区别详解
- form中限制文本字节数js代码
- 国通网讯家园网为您提供120M免费永久空间
- android实现条目倒计时功能
- Thinkphp5.0框架视图view的循环标签用法示例