sql语句中where后边的哪些条件会使索引失效 -- SQL语句优化

在我们编写sql的过程中where的条件使用不当会使索引(index)失效

1. 在 where 子句中使用!=或<>操作符,会使引擎放弃使用索引而进行全表扫描

2. 在 where 子句中对字段进行 null 值判断,会使引擎放弃使用索引而进行全表扫描

3. 在 where 子句中使用 or 来连接条件,会使引擎放弃使用索引而进行全表扫描

可改为:

4. 在 where 子句中对字段进行表达式操作,会使引擎放弃使用索引而进行全表扫描

可改为:

5. 在where子句中对字段进行函数操作,会使引擎放弃使用索引而进行全表扫描

6. 在 where 子句中的“=”左边进行函数、算术运算或其他表达式运算,系统将可能无法正确使用索引

原文地址:https://www.cnblogs.com/woxbwo/p/11538080.html

时间: 2024-10-28 21:22:23

sql语句中where后边的哪些条件会使索引失效 -- SQL语句优化的相关文章

SQL Server中是否可以准确获取最后一次索引重建的时间?

原文:SQL Server中是否可以准确获取最后一次索引重建的时间? 在SQL Server中,我们能否找到索引的创建时间?最后一次索引重建(Index Rebuild)的时间? 最后一次索引重组(INDEX REORGANIZE)的时间呢?  答案是我们无法准确的找到索引的创建时间.最后一次索引重组时间,最后一次索引重建的时间. 其实就目前SQL Server的各个版本而言,还没有一个系统表或DMV视图有保存索引创建的时间,索引重建的时间.索引重组的时间.但是有些方法可以间接得到最后一次索引重

13 三种方式替换SQL Server中的NULL值(Different ways to replace NULL in Sql Server)

在Sql Server中有三种方式对查询结果中的NULL值进行替换. 如有下面的一张表: 我们可以通过自连接(Self-Join)的方式一张员工名和其对应的经理名的表: SELECT E.[Name],M.[Name] FROM [tblEmployee] AS E LEFT JOIN [tblEmployee] AS M ON E.ManagerId = M.EmployeeId 我们可以看到,Todd对应的Manger为NULL,这说明Todd应该是公司的最高层,他没有经理.但是这样显示很不

SQL Server中如何识别、查找未使用的索引(unused indexes)

在SQL Server中,索引是优化SQL性能的一大法宝.但是由于各种原因,索引会被当做"银弹"滥用,一方面有些开发人员(甚至是部分数据库管理员)有一些陋习,不管三七二十一,总是根据所谓的"感觉"或"经验"先增加一些索引,而不管这些索引是否未被使用或是否合理.另外一方面在数据库的生命周期中,需求总是在变化,业务也在变化,有些当初创建的有效索引可能已经变成了unused index了.变成了数据库性能的累赘: 另外,部分数据库管理员其实很少清理索引

SQL Server 中SELECT INTO 和 INSERT INTO SELECT 两种表复制语句

1.INSERT INTO SELECT语句 语句形式为:Insert into Table2(field1,field2,...) select value1,value2,... from Table1 要求目标表Table2必须存在,由于目标表Table2已经存在,所以我们除了插入源表Table1的字段外,还可以插入常量. 2.SELECT INTO FROM语句 语句形式为:SELECT vale1, value2 into Table2 from Table1 要求目标表Table2不

Join语句中的on和where条件过滤的区别

onli的条件先过滤,在笛卡尔乘积join:而where里条件是先笛卡尔乘积join,然后再过滤. inner join两种条件结果一样,left join和right join就有区别了. 参考blog: https://blog.csdn.net/qq_41973536/article/details/81081024 https://www.jb51.net/article/28188.htm https://blog.csdn.net/u012955829/article/details

php MYSQL 一条语句中COUNT出不同的条件

SELECT DISTINCT c.uid, count( 1 ) AS zongji, count( if( task_type = 'mobile', true, NULL ) ) AS mobile, count( if( task_type = 'computer', true, NULL ) ) AS computer FROM keke_witkey_task_work AS c WHERE c.op_status >0 AND c.free_price >3 AND c.work

sql server中format函数的yyyyMMddHHmmssffff时间格式兼容旧版sql写法

问题:博主看到项目脚本,有些地方使用了format函数来把当前日期转换成yyyyMMddHHmmssffff的格式,但在测试环境数据库是sql 2008 r2,是不支持format这个函数的.脚本会报错: 'format' 不是可以识别的 内置函数名称. 'format' is not a recognized built-in function name. 解决方案:由于低版本的SQL不支持format,例如sql 2008\2005\2000,需要使用其他方法来代替.博主经过试验,使用了co

SQL Server中,如何查看每个数据库的Owner是哪个SQL Server账户,也就是谁创建的

有时候我们作为SQL Server的DBA,会需要查找每个数据库的Owner是哪个SQL Server账户,也就是谁创建的. 我们可以使用系统存储过程"sys.sp_helpdb",查询到每个数据库的Owner是哪个SQL Server账户: EXEC sys.sp_helpdb 结果如下: 通过查询结果中的owner列,我们就可以知道每个数据库的Owner是哪个SQL Server账户,也就是谁创建的. 原文地址:https://www.cnblogs.com/OpenCoder/p

SQL优化的四个方面,缓存,表结构,索引,SQL语句

一,缓存 数据库属于 IO 密集型的应用程序,其主要职责就是数据的管理及存储工作.而我们知道,从内存中读取一个数据库的时间是微秒级别,而从一块普通硬盘上读取一个IO是在毫秒级别,二者相差3个数量级.所以,要优化数据库,首先第一步需要优化的就是 IO,尽可能将磁盘IO转化为内存IO. query_cache_size/query_cache_type (global) Query cache 作用于整个 MySQL Instance,主要用来缓存 MySQL 中的 ResultSet,也就是一条S