为了数据的安全性,mysql有一个安全性设置,sql_safe_updates ,当把这个值设置成1的时候,当程序要对数据进行修改删除操作的时候条件必须要走索引。

刚好现在也碰到了此类问题:网上找了相关文章查看,了解到了有些时候虽然设置了索引列,但是在有些情况下他是不走索引的

1,字段类型不匹配 比如int类型和varchar  比如当code是索引时

Select * from table where code=123  这样是不会走索引的

必须

Select * from table where code=”123” 这样才会走索引

2,not in ,!=,is not null 不会走,网上说的是not in会分索引的类型有的走,有的不走,但是我在下面执行的结果是不走的

3,如果函数对索引列进行操作后是不会走的 如

SELECT * FROM box_org WHERE LENGTH(CODE)= "100001032"

这些都是一些比较明显的,还有一种特殊的情况,隐藏的比较深,我有个功能被这个坑了几天

就是当你sql解释器里面有多条解释,只要有一条没走索引,那么你这条语句就不能更新和删除,比较奇怪的是我13开发环境中测试程序能直接删除,但是test就是删除不了,就是这样原因不得不去解决,所以才有了以下的猜测。

(ps:13上的安全设置开启没有?我以前测是开启了,没加索引的不能删除,加了的就能删,按理说这样就证明已经开启了,而且13组织这个功能也能删,但是在test上就删不了,这个比较奇怪,一哥你可以去看下,看test和13环境有什么不同,肯定不是数据库版本不同导致的,因为我把sql拿出来仔细测了n边,手动set后,在mysql客户端执行13也是不行的,但是在商家后台执行却能成功- -)

下面是我测试截图

这个是解释器,里面只有一条走了索引

看看删除结果

提示删除失败,更新表必须要用到索引列

在看看下面一张图

这里的shop_id 是索引列,但是他还是没走索引 ,这样就让我不的不猜测是不是sql有问题,因为box_org 这个相当于一个临时表(这个理解肯定有有问题,它不是临时表,但是当时测的时候我是这样想的),而当作为临时表的时候,他里面所有的索引是不是都被隐式给转掉了,不让走索引了

下图执行删除结果

为了验证上面猜测,函数包含不走索引,及临时表不走索引,下面我也做了一下实验

这条sql我用了inner join 连接查询 条件都用函数或者是is not 结果是没走索引,下面是执行更新情况

然后我重新加了一个索引 is_active

很明显,is_active 走了索引,然后来执行更新操作

结果成功

为了验证我上面说的所谓的临时表不走索引我又做了一下实验

很明显,我上面的临时表结论是错误的,box_org不是一张临时表,所以我理解错误了下面是执行结果

执行成功

但是为什么这句会失败呢,同样的写法

结果

从上面对比可以知道就是当解释器里面有没走索引时,是不会删除成功的

测试的时候我还发现了一个坑爹的问题,那就是当没有数据的时候他执行是不会报错的,因为没有数据执行sql时数据库里面没有数据给他操作,如下

有数据的结果

这也就导致了为什么在两个环境中时好时坏,测试的时候也会出现不同的结果

所以写此类sql的时候最好还是用连接查询,这样避免此类问题,下面是连接查询执行结果

执行成功

总结:当与到此类问题最好是走连接查询吧,不然sql写的有问题,测的时候会时好时坏,把人搞懵,费时费力费脑。。。以上就是我的结论,因为研究的不深,可能会有出入或者是错误的地方,仅供给大家一个参考。但是连接查询还有上面不走索引的我是测试了的,可以保证

猜测解释器只要有一条不走索引,那么更新就更新不了,至少我上面测试的结论是这样的,还有那个所谓的临时表猜测,因为理解有误所以测的有点乱,好像有点牛头不对马嘴。

仔细看了下

为什么code走索引,而shop_id不走呢?难道是前面走了索引后面就不走了?显然看一图就不成立,猜测2,难道索引后面只能跟具体值?看一图和二图也不成立。到现在这个问题我也没能搞明白- -

sql 索引 sql_safe_updates的更多相关文章

  1. SQL索引学习-索引结构

    前一阵无意中和同事讨论过一个SQL相关的题(通过一个小问题来学习SQL关联查询),很惭愧一个非常简单的问题由于种种原因居然没有回答正确,数据库知识方面我算不上技术好,谈起SQL知识的学习我得益于200 ...

  2. SQL索引学习-聚集索引

    这篇接着我们的索引学习系列,这次主要来分享一些有关聚集索引的问题.上一篇SQL索引学习-索引结构主要是从一些基础概念上给大家分享了我的理解,没有实例,有朋友就提到了聚集索引的问题,这里列出来一下: 其 ...

  3. 数据库性能优化:SQL索引

    SQL索引在数据库优化中占有一个非常大的比例, 一个好的索引的设计,可以让你的效率提高几十甚至几百倍,在这里将带你一步步揭开他的神秘面纱. 1.1 什么是索引? SQL索引有两种,聚集索引和非聚集索引 ...

  4. SQL索引一步到位

    以下均非原创,仅供分享.学习!!! SQL索引在数据库优化中占有一个非常大的比例, 一个好的索引的设计,可以让你的效率提高几十甚至几百倍,在这里将带你一步步揭开他的神秘面纱. 1.1 什么是索引? S ...

  5. {好文备份}SQL索引一步到位

    SQL索引一步到位(此文章为"数据库性能优化二:数据库表优化"附属文章之一)   SQL索引在数据库优化中占有一个非常大的比例, 一个好的索引的设计,可以让你的效率提高几十甚至几百 ...

  6. 转载:SQL索引一步到位

    原文: http://www.cnblogs.com/AK2012/archive/2013/01/04/2844283.html SQL索引一步到位(此文章为“数据库性能优化二:数据库表优化”附属文 ...

  7. SQL索引一步到位(此文章为“数据库性能优化二:数据库表优化”附属文章之一)

    SQL索引一步到位(此文章为“数据库性能优化二:数据库表优化”附属文章之一) SQL索引在数据库优化中占有一个非常大的比例, 一个好的索引的设计,可以让你的效率提高几十甚至几百倍,在这里将带你一步步揭 ...

  8. SQL索引详解

    转自:http://www.cnblogs.com/AK2012/archive/2013/01/04/2844283.html SQL索引在数据库优化中占有一个非常大的比例, 一个好的索引的设计,可 ...

  9. 数据库性能优化一:SQL索引一步到位

    SQL索引在数据库优化中占有一个非常大的比例, 一个好的索引的设计,可以让你的效率提高几十甚至几百倍,在这里将带你一步步揭开他的神秘面纱. 1.1 什么是索引? SQL索引有两种,聚集索引和非聚集索引 ...

随机推荐

  1. WorldWind源码剖析系列:绘制参数类DrawArgs

    绘制参数类DrawArgs主要对绘制时需要的对象如:设备对象Microsoft.DirectX.Direct3D.Device.Microsoft.DirectX.Direct3D.Font字体对象. ...

  2. PRML5-神经网络(2)

    本节来自<pattern recognition and machine learning>第5章. 接(PRML5-神经网络(1)) 5.5NN中的正则化 NN的输入层和输出层的单元个数 ...

  3. day37

    今日内容 1.线程池和进程池 2.利用线程池实现套接字并发通信 3.协程(利用模块gevent模块,实现单线程下套接字并发通信) 1.线程池与进程池 要用线程池与进程池,首先要导入concurrent ...

  4. 【H5】滚动事件(jq)

    $(function(){ console.log($('html,body').scrollTop());  //记录滚动高度(滚动前) }) $('html,body').scroll(funct ...

  5. 蜻蜓fm面试

    一面: 面试官首先看简历上写了在腾讯的实习,然后就探讨了半天,各种虚拟化的技术.... 说完之后,估计都半小时过去了,然后就又说了一下你用什么语言,你做的东西都比较偏底层呢,然后你对工作有什么要求吗? ...

  6. Linux服务器安全之 fail2ban的安装与配置

    近日在查看Nginx的访问日志中,发现了大量404请求,仔细研究一番发现有人正在试图爆破网站. 我刚上线你就企图攻击我?????? 这怎么能忍.. 于是乎 --- 查资料后得知有一个神奇的工具 fai ...

  7. 【Python实践-7】输出100以内的所有素数

    #输出100以内的所有素数,素数之间以一个空格区分(注意,最后一个数字之后不能有空格). i= l=[] : k= ,i): : k=k+ : l.append(i) i=i+ print(" ...

  8. 2017-2018 Exp1 PC平台逆向破解 20155214

    目录 Exp1 PC平台逆向破解 实验内容 知识点 官方源 中科大源 上海交大的源 新加坡源 debain源 debian安全更新源 163源的地址 阿里云kali源 启发 评论 Exp1 PC平台逆 ...

  9. 2017-2018-2 20155231《网络对抗技术》实验五: MSF基础应用

    2017-2018-2 20155231<网络对抗技术>实验五: MSF基础应用 实践目标 掌握信息搜集的最基础技能与常用工具的使用方法. 实验内容 (1)各种搜索技巧的应用 比如IP2L ...

  10. python 实现分治法的几个例子

    分治法所能解决的问题一般具有以下几个特征: 1) 该问题的规模缩小到一定的程度就可以容易地解决 2) 该问题可以分解为若干个规模较小的相同问题,即该问题具有最优子结构性质. 3) 利用该问题分解出的子 ...