常用的7个SQl优化技巧

作为程序员经常和数据库打交道的时候还是非常频繁的,掌握住一些Sql的优化技巧还是非常有必要的。下面列出一些常用的SQl优化技巧,感兴趣的朋友可以了解一下。

1、注意通配符中Like的使用

以下写法会造成全表的扫描,例如:

select id,name from userinfo where name like '%name%'

或者

select id,name from userinfo where name like '%name'

下面的写法执行效率快很多,因为它使用了索引

select id,name from userinfo where name like 'name%'

2、避免在where子句中对字段进行函数操作

比如:

select id from userinfo where substring(name,1,6) = 'xiaomi'

或者

select id from userinfo where datediff(day,datefield,'2017-05-17') >= 0

上面两句都对字段进行了函数处理,会导致查询分析器放弃了索引的使用。

正确的写法:

select id from userinfo where name like'xiaomi%'

select id from userinfo where datefield <= '2017-05-17'

通俗理解就是where子句‘=’ 左边不要出现函数、算数运算或者其他表达式运算

3、在子查询当中,尽量用exists代替in

select name from userinfo a where id in(select id from userinfo b)

可以改为

select name from userinfo a where exists(select 1 from userinfo b where id = a.id)

下面的查询速度比in查询的要快很多。

4、where子句中尽量不要使用is null 或 is not null对字段进行判断

例如:

select id from userinfo where name is null

尽量在数据库字段中不出现null,如果查询的时候条件为 is null ,索引将不会被使用,造成查询效率低,

因此数据库在设计的时候,尽可能将某个字段可能为空的时候设置默认值,那么查询的时候可以

根据默认值进行查询,比如name字段设置为0,查询语句可以修改为

select id from userinfo where name=0

5、避免在where子句使用or作为链接条件

例如:

select id from userinfo where name='xiaoming' or name='xiaowang'

可以改写为:

select id from userinfo where name = 'xiaoming' union all

select id from userinfo where name = 'xiaowang'

6、避免在 where 子句中使用 != 或 <> 操作符。

例如:

select name from userinfo where id <> 0

说明:数据库在查询时,对 != 或 <> 操作符不会使用索引,

而对于 < 、 <= 、 = 、 > 、 >= 、 BETWEEN AND,数据库才会使用索引。

因此对于上面的查询,正确写法可以改为:

select name from userinfo where id < 0 union all

select name from userinfo where id > 0

7、少用in 或 not in

对于连续的数值范围查询尽量使用BETWEEN AND,例如:

select name from userinfo where id BETWEEN  10 AND 70

以上只是相对来说比较常用的sql优化技巧,当然还有很多欢迎补充!

欢迎关注公众号:DoNet技术分享平台

阅读原文

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/272798.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

toolbar java_Java ToolBar.layout方法代码示例

import org.eclipse.swt.widgets.ToolBar; //导入方法依赖的package包/类protected ToolBar createToolbar() {final ToolBar t new ToolBar(composite, SWT.FLAT | SWT.LEFT | SWT.HORIZONTAL | SWT.WRAP);final GridData d new GridData(SWT.FILL, SWT.TOP, false, false);…

Visual Studio常用的快捷键整理

微软的开发工具Visual Studio作为DoNet开发者来说是必备神器&#xff0c;该开发工具内置了很多的开发快捷键&#xff0c;熟悉了这些开发快捷键&#xff0c;对于程序员来说事半功倍&#xff0c;所以在这里整理一下&#xff0c;版本是vs2012以上&#xff0c;目前小编列出了自己觉…

win7旗舰版6l打印机咋安驱动_在w7旗舰版上怎么安装HPlaserjet6L打印机?

您好&#xff0c;感谢您选择惠普产品。首先6L产品只有并口线&#xff0c;但是现在win 7 电脑基本都没有并口&#xff0c;有可能是您使用了转接usb设备&#xff0c;但是产品在出厂的时候会对产品作测试&#xff0c;测试的结果是不建议使用转接设备或者是延长设备&#xff0c;以免…

收集一些工作中常用的经典SQL语句

作为一枚程序员来说和数据库打交道是不可避免的&#xff0c;现收集一下工作中常用的SQL语句&#xff0c;希望能给大家带来一些帮助&#xff0c;当然可能不全面&#xff0c;欢迎补充&#xff01;1、执行插入语句&#xff0c;获取自动生成的递增的ID值INSERT INTO SysRole (RoleN…

ascii modbus vc源码_MODBUS ASCII及MODBUS RTU通讯

代码片段和文件信息using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Windows.Forms;using System.IO.Ports;//串口using…

Asp.Net操作Cookie总结

一、什么是Cookie&#xff1f;Cookie是存储在客户端文件系统的文本文件或客户端浏览器对话的内存中的少量数据。它主要用来跟踪数据设置&#xff0c;例如&#xff1a;当我们要访问一个网站网页的时候&#xff0c;用户请求网页时&#xff0c;应用程序可能会首先检查此用户是否已…

java GUI怎么输入_在Swing中创建Java GUI以进行表单输入

好吧,我已经浏览了整个互联网,但却未能找到这个问题的答案,所以也许有人可以提供一些见解.我正在开发一个相对简单的Java应用程序,它将取代目前用于系统访问请求的Word文档.它旨在允许表单输入新的员工雇用信息 – 名称,所需的访问权限等.所以这是我的问题.尝试使用所有文本字段…

Net中Session的用法

一、什么是Session&#xff1f;简单来说&#xff0c;就是用户与网站服务器建立的一个连接&#xff0c;服务器分配给一个编号。当一台WWW服务器运行时&#xff0c;可能有若干用户正在浏览运行在这台服务器上的网站。当用户首次与这台WWW服务器创建连接的时候&#xff0c;它就和这…

关于Json的总结

一、什么是Json&#xff1f;JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。它使得人们很容易的进行阅读和编写。同时也方便了机器进行解析和生成。它是基于 JavaScript Programming Language , Standard ECMA-262 3rd Edition - December 1999的一个子集。 JS…

java 整数溢出检测,Java如何处理整数下溢和溢出以及如何检查它?

How does Java handle integer underflows and overflows?Leading on from that, how would you check/test that this is occurring?解决方案If it overflows, it goes back to the minimum value and continues from there. If it underflows, it goes back to the maximum…

console 程序随系统启动及隐藏当前程序窗口

应业务需求&#xff0c;程序需要与系统启动而自动运行&#xff0c;故加入以下代码&#xff0c;保存成 .bat文件 &#xff0c;双击执行即可 reg add "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run" /v HuazhuPushRecord /t reg_sz /d "your…

Linq用法笔记

一、什么是Linq?LINQ即Language Integrated Query(语言集成查询)&#xff0c;LINQ是集成到C#和Visual Basic.NET这些语言中用于提供查询数据能力的一个新特性。LINQ是一种用来进行数据访问的编程模型&#xff0c;Linq可以用相同的语法访问不同的数据源&#xff0c;比如xml、数…

用例图练习

转载于:https://www.cnblogs.com/fzuyzy/p/4925246.html

java excel row遍历空_Java poi读取,写入Excel,处理row和cell可能为空的情况

首先需要导入包import org.apache.poi.hssf.usermodel.HSSFWorkbook;import org.apache.poi.poifs.filesystem.NPOIFSFileSystem;import org.apache.poi.ss.usermodel.Row;import org.apache.poi.ss.usermodel.Sheet;import org.apache.poi.ss.usermodel.Workbook;然后写方法&a…

JQuery常用选择器总结

作为网站开发者来说&#xff0c;不可避免的需要和页面打交道&#xff0c;很多时候都需要去操作一些页面上的元素&#xff0c;掌握常用的Jquery选择器是十分有必要的。现从网上整理一些常用的Jquery选择器&#xff0c;希望能给大家带来一些开发上的便利。一、基本选择器&#xf…

java 常量 内存分配_Java内存分配之堆、栈和常量池

寄存器&#xff1a;最快的存储区&#xff0c;位于不同于其他存储区的地方——处理器内部。寄存器的数量极其有限&#xff0c;所以寄存器由编译器根据需求 进行分配。你不能直接控制&#xff0c;也不能在程序中感觉到寄存器存在的任何迹象。栈&#xff1a;存放基本类型的数据和对…

三种SQLServer分页查询语句笔记

作为程序员来说&#xff0c;与数据库打交道是十分频繁的分页查询是一个开发者必须掌握的基本知识点&#xff0c;目前整理了下面三种SQLServer分页查询语句的写法&#xff0c;仅供参考。一、Top Not IN 方式&#xff08;查询靠前的数据较快&#xff09;语法格式&#xff1a;sele…

sqlserver2008r2安装

转载于:https://www.cnblogs.com/sprinng/p/4932739.html

JQuery七个常犯的错误

1、 乱用选择器JQuery选择器调用代价很大&#xff0c;反复调用效率更低。应采用缓存对象的方法或采用链式调用的方式。//错误的写法$("#button").click(function(){ $(#list li).addClass(strong); $(#list li).css(color,red);});//正确的写法$("#button…

java流读取xml_使用FileInputStream(用于Java)读取XML文件?

这是交易.对于我的项目,我必须使用Java和XStream对随机树进行序列化和反序列化.我的老师制作了Tree / RandomTree算法,所以我不必担心.我不知道该怎么做是这样的&#xff1a;我使用FileInputStream来读/写我序列化和反序列化的xml文件,但是当我反序列化时,我不知道用于读取文件…