SQL优化的N种方法(小结)_MsSql

来源:脚本之家  责任编辑:小易  

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 性能优化的最佳20多条经验分享MySQL优化必须调整的10项配置优化Mysql数据库的8个方法MYSQL 优化常用方法MYSQL性能优化分享(分库分表)mysql优化配置参数SQLite优化方法MySQL 索引分析和优化

  • 本文相关:
  • sql server创建临时表的两种写法和删除临时表
  • sql语句的各个关键字的解析过程详细总结
  • sql常用日期查询语句及显示格式设置
  • sql server中关于基数估计计算预估行数的一些方法探讨
  • sql下三种批量插入数据的方法
  • sql server性能调优 i/o开销的深入解析
  • sql使用cast进行数据类型转换示例
  • sqlserver 根据地图经纬度计算距离差示例
  • sql更新语句中update set from用法实现
  • sql?server中的数据类型详解
  • SQL数据库优化大总结之百万级数据库优化方案
  • SQL Server 优化存储过程的方法有哪些
  • 如何通过优化sql语句提高数据库查询效率?
  • 谁总结下sqlserver数据库优化知识的详解和具体操作最优方案!
  • mysql数据库sql优化原则(经验总结)
  • oracle数据库sql的优化总结
  • SQL Server数据库的高性能优化经验总结
  • 数据库sql语句优化
  • 如何对Oracle sql 进行性能优化的调整
  • SQL Server并行操作优化避免并行操作被抑制而影响SQL的执...
  • 深入学习SQL Server聚合函数算法优化技巧
  • MYSQL表优化方法小结 讲的挺全面
  • 谈谈Tempdb对SQL Server性能优化有何影响
  • SQLServer性能优化--间接实现函数索引或者Hash索引
  • Mysql性能优化案例研究-覆盖索引和SQL_NO_CACHE
  • 如何优化索引:提高SQL语句查询性能
  • sql优化除了索引还有可以怎么优化
  • SqlServer 索引自动优化工具
  • mysql优化小结
  • 网站首页网页制作脚本下载服务器操作系统网站运营平面设计媒体动画电脑基础硬件教程网络安全mssqlmysqlmariadboracledb2mssql2008mssql2005sqlitepostgresqlmongodbredisaccess数据库文摘数据库其它首页mysql 性能优化的最佳20多条经验分享mysql优化必须调整的10项配置优化mysql数据库的8个方法mysql 优化常用方法mysql性能优化分享(分库分表)mysql优化配置参数sqlite优化方法mysql 索引分析和优化sql server创建临时表的两种写法和删除临时表sql语句的各个关键字的解析过程详细总结sql常用日期查询语句及显示格式设置sql server中关于基数估计计算预估行数的一些方法探讨sql下三种批量插入数据的方法sql server性能调优 i/o开销的深入解析sql使用cast进行数据类型转换示例sqlserver 根据地图经纬度计算距离差示例sql更新语句中update set from用法实现sql?server中的数据类型详解sql server 2012 安装图解教程(附sql201sql server数据库入门学习总结microsoft sql server 2012 数据库安win7系统安装sqlserver2000的详细步骤(图文)sql重复记录查询的几种方法sqlserver中distinct的用法(不重复的记录)ddl、dml和dcl的区别与理解sql server错误代码大全及解释(留着备用)sql-order by 多字段排序(升序、降序)sql将一个表中的数据插入到另一个表中的方法通过sqlserver重启sqlserver服务和计算机的方法sql语句执行顺序详解sqlserver通用的删除服务器上的所有相同后缀的临时表sql建立数据库及删除数据库命令sql?server的触发器详解sql 在自增列插入指定数据的操作方法sql数据库日志已满解决方法sql中all,any,some用法sql中字符串中包含字符的判断方法sql开窗函数的具体实现详解
    免责声明 - 关于我们 - 联系我们 - 广告联系 - 友情链接 - 帮助中心 - 频道导航
    Copyright © 2017 www.zgxue.com All Rights Reserved