精华内容
下载资源
问答
  • 群里一个小伙伴在问为什么MySQL字符串不加引号会导致索引失效,这个问题估计很多人都知道答案。没错,是因为MySQL内部进行了隐式转换。 本期文章就聊聊什么是隐式转换,为什么会发生隐式转换。 文章目录 系列文章 ...

    群里一个小伙伴在问为什么MySQL字符串不加单引号会导致索引失效,这个问题估计很多人都知道答案。没错,是因为MySQL内部进行了隐式转换。

    本期文章就聊聊什么是隐式转换,为什么会发生隐式转换。

    系列文章

    字符串可以这样加索引,你知吗?《死磕MySQL系列 七》

    无法复现的“慢”SQL《死磕MySQL系列 八》

    什么?还在用delete删除数据《死磕MySQL系列 九》

    MySQL统计总数就用count(*),别花里胡哨的《死磕MySQL系列 十》

    文章总目录

    一、几大索引失效原因

    你肯定在网上看到过非常多关于索引失效原因的文章,但是一定要自己亲手尝试一下,因为版本不同引发的结果不会一致。

    1.带头大哥不能死

    这局经典语句是说创建索引要符合最左侧原则。

    例如表结构为u_id,u_name,u_age,u_sex,u_phone,u_time

    创建索引为idx_user_name_age_sex

    查询条件必须带上u_name这一列。

    2.不在索引列上做任何操作

    不在索引列上做任何计算、函数、自动或者手动的类型转换,否则会进行全表扫描。简而言之不要在索引列上做任何操作。

    3.俩边类型不等

    例如建立了索引idx_user_name,name字段类型为varchar

    在查询时使用where name = kaka,这样的查询方式会直接造成索引失效。

    正确的用法为where name = “kaka”。

    4.不适当的like查询会导致索引失效

    创建索引为idx_user_name

    执行语句为select * from user where name like “kaka%”;可以命中索引。

    执行语句为select name from user where name like “%kaka”;可以使用到索引(仅在8.0以上版本)。

    执行语句为select * from user where name like ‘’%kaka";会直接导致索引失效

    5.范围条件之后的索引会失效

    创建索引为idx_user_name_age_sex

    执行语句select * from user where name = ‘kaka’ and age > 11 and sex = 1;

    上面这条sql语句只会命中name和age索引,sex索引会失效。

    复合索引失效需要查看key_len的长度即可。

    总结:%在后边会命令索引,当使用了覆盖索引时任何查询方式都可命中索引。

    以上就是咔咔关于索引失效会出现的原因总结,在很多文章中没有标注MySQL版本,所以你有可能会看到is null 、or索引会失效的结论。

    二、从规则方面说明索引失效的原因

    问题的答案就是第3点,两边类型不一致导致索引失效。

    下图是表结构,目前这个表存在两个索引,一个主键索引,一个普通索引phone。

    分别执行以下两条SQL语句

    explain select * from evt_sms where phone = 13020733815;
    
    explain select * from evt_sms where phone = '13020733815';
    
    

    在这里插入图片描述

    从上图可看出,执行第一条SQL没有使用到索引,第二条SQL却使用到了索引。

    不错,你也发现了两条SQL的不同,第二条SQL跟第一条SQL逻辑一致,不同的是一个查询条件有引号,一个没有。

    问题:为什么逻辑相同的SQL却是用不了索引

    选择索引是优化器大哥的工作,大哥做事肯定轮不到咱们去教,因为大哥有自己的一套规则。

    对于优化器来说,如果等号两边的数据类型不一致,则会发生隐式转换。

    例如,explain select * from evt_sms where phone = 13020733815;这条SQL语句就会变为explain select * from evt_sms where cast(phone as signed int) = 13020733815;

    由于对索引列进行了函数操作,从而导致索引失效。

    问题:为什么会把左侧的列转为int类型呢?

    优化器大哥就是根据这个规则进行判断,是把字符串转为数字,还是把数字转为字符串。

    若返回1,则把字符串转为数字。

    若返回0,则把数字转为字符串。

    问题:select * from evt_sms where id = "193014410456945216"这条SQL语句能用上索引吗?

    如果你忘记了表结构,可以翻到文章开头再看下表evt_sms的索引。

    可以知道列id添加了主键索引,类型为int类型。

    根据规则得到,MySQL8.0以上的版本是将字符串转为数字。

    所以说,函数操作的是等号右边的数据,跟索引列没有关系,所以可以用上索引。

    那么来到数据库验证一下结论,你答对了吗?

    三、从索引结构说明索引失效原因

    有这样一个需求,要统计每年双11注册用户数量。

    可以看到在evt_sms表中是没有给create_time创建索引的,于是你会执行alter table evt_sms add index idx_ctime(create_time),给create_time添加上索引。

    接着你就执行了下面的SQL语句。

    explain select count(*) from evt_sms where month(create_time) = 11;
    
    

    上线没一会数据库出现了大量的慢查询,导致非常多的SQL返回失败。

    此时公司大牛肯定会直接指出问题,索引列进行函数操作。

    问题:为什么索引列使用函数就用不上索引了呢?

    你现在看到的create_time索引结构图。

    若此时执行的是where create_time = ‘2021-11-16’,那么MySQL就会非常快的等位到对应位置,并返回结果。

    但是,做了函数操作,例如month(2021-11-16)得到的值是11。

    当MySQL拿到返回的这个11时,在索引结构中根据就不知道怎么办。MySQL之所以能使用快速定位,是因为B+树的有序性。

    而使用了函数对索引列进行操作后就会破坏索引的有序性,因此优化器大哥会选择执行代价最低的索引来继续执行。

    四、结论

    本期文章给大家介绍了两个案例,一个隐式转换,一个对索引列进行函数操作。

    两种情况的本质是一样的,都是在索引列上进行了函数操作,导致全表扫描。

    类似于这两种情况的还是字符集问题,不过一般这个问题会会很少发生,如有新业务需要新创建表,都会设置为之前的字符集。

    两张表的字符集不同在进行join时也会导致隐式字符集转换,导致索引失效。

    坚持学习、坚持写作、坚持分享是咔咔从业以来所秉持的信念。愿文章在偌大的互联网上能给你带来一点帮助,我是咔咔,下期见。

    展开全文
  • 展开全部凡是把引用的话独立来用,末尾点号放在引号里边62616964757a686964616fe4b893e5b19e...引号一种很重要的标点符号,它包括起引号或称正引号或左引号(用“表示)和引回号或称反引号或引号(用”表示)...

    展开全部

    凡是把引用的话独立来用,末尾点号放在引号里边62616964757a686964616fe4b893e5b19e31333433633533。如果引用的内容是句子的一个组成部分,即引文没有独立性,引用部分末尾不用点号(问号、叹号可保留),整个句子该停顿处则停顿,该用何点号则用何点号。

    引号为一种很重要的标点符号,它包括起引号或称正引号或左引号(用“表示)和引回号或称反引号或右引号(用”表示)两部分,使用时一定是成对出现的,引语即使是未说完整以省略号结束,在省略号后引回。

    起引号“不用于行尾,引回号”不用于行首。用作文纸书写时,若引语的最后一字占了行的最后一格,则引回号标在格线外;若引语开始于行的最后一格,可从下一行首开始起引。

    扩展资料

    国大陆地区标准:先用双引号“ ”,内部如需再引用,再用单引号‘’,若再需引用,使用双引号“”,以此类推。直排仍保持双引号在外,改用『』和「」。(根据中华人民共和国国家标准,《标点符号用法》,2011-12-30发布,2012-06-01实施)

    台湾地区标准:先用单引号「」,内部如需要引用,再用双引号『』。而双引号内部又需要引用,则再用单引号,如此类推。(根据“中华民国教育部国语推行委员会”,《重订标点符号手册》,1997年3月台湾学术网络三版。)

    直接引用别人的话,用引号;间接引用别人的话,不用引号。当引号中还需要使用引号时,外面一层用双引号,里面一层用单引号。连续引用几个文段时,每段开头都要用前引号,只在最后一段用后引号。

    参考资料来源:百度百科-引号

    展开全文
  • 【判断题】金属热电阻的电阻丝采用双绕法的目的是消除其电感效应...【判断题】系统的微分方程 ,则系统属于非线性系统( )【单选题】________ refers to the study of how human beings and animals use space in ...

    【判断题】金属热电阻的电阻丝采用双绕法的目的是消除其电感效应

    【判断题】福柯认为写作是作者的表现?

    【单选题】MF/HF DSC遇险警报中若未指明通信手段,则表明遇险通信手段是( )。

    【判断题】系统的微分方程为 ,则系统属于非线性系统( )

    【单选题】________ refers to the study of how human beings and animals use space in communication.

    【判断题】牛病毒性腹泻病毒有BVDV1和BVDV2两种,均可引起牛腹泻和黏膜病,其中BVDV1与猪瘟病毒有抗原交叉,可感染猪。

    【多选题】色阶就是用直方图描述出的整张图片的明暗信息,从左至右是从暗到亮的像素分布,黑色代表(),白色三角代表(),灰色三角代表()。

    【单选题】1927 年大革命失败后,党的工作重心开始转向农村,在农村建立革命根据地,革命根据地能够在中国长期存在和发展的根本原因是( )

    【单选题】对于脊柱受伤的伤员 , 下 列运送方法中 正确的是

    【多选题】旅游企业策划活动体现在准确定位、梳理问题、明确目标;选择合适的策划团队;拟定计划和组织分工;实施调研,分析论证及( )程序中。

    【判断题】甘特图以图示通过活动列表和时间刻度表示出特定项目的顺序与持续时间。一条线条图,横轴表示时间,纵轴表示项目,线条表示期间计划和实际完成情况。直观表明计划何时进行,进展与要求的对比。便于管理者弄清项目的剩余任务,评估工作进度。

    【单选题】若某线性表中最常用的操作是在最后一个元素之后插入一个元素和删除第一个元素,则采用( )存储方式最节省运算时间。

    【判断题】接力跑比赛时应由检查员准备接力棒。

    【单选题】原子在6G3/2状态,其有效磁矩为( )。

    【判断题】海绵窦内血流缓慢,感染时容易形成血栓。两侧海绵窦经鞍膈前后的海绵间窦相交通,故一侧海绵窦感染时可蔓延到对侧。

    【单选题】SSH三大框架中,依次处理的哪一层的实现()

    【判断题】y(t)=f(t)*h(t),则y(2t)=2f(2t)*h(2t)。

    【判断题】含儿化韵尾的音节读出来是一个音节,写下来却不只是一个汉字。( )

    【单选题】Our manager's an _________ person and she never gets angry.

    【多选题】匈奴人的腰饰有

    【多选题】会计信息系统的特点有( )。

    【多选题】铸造毛坯的工艺性主要考虑以下因素:_x000b_

    【多选题】热油管道的投产包括下列哪些程序() ?

    【单选题】以下哪一点不是新闻媒体资料要点?( )

    【单选题】The custom of____________ to the fairy and rabbit is gone , but the moon cakes are showing improvement every year.

    【单选题】以下有关合同解除的说法错误的是:( )

    【多选题】以下属于旅游业的基本特点的有( )。

    【单选题】诺贝尔一生的发明极多,获得的专利就有355种,其中仅炸药就达()种

    【单选题】某烃分子式为 C 5 H 8 ,它能使高锰酸钾水溶液和溴水褪色,与银氨溶液生成白色沉淀的结构式为( )

    【单选题】苹果脯加工过程中,糖制是关键的环节,一般加糖量为:

    【填空题】情境领导理论将权变因素聚焦在员工特点上,并根据员工的成熟度不同,将领导方式分为四种:_____、_____、______、______。

    【单选题】一个八度的大调音阶中有几个半音?

    【多选题】下列属于环境许可证的是

    【单选题】如果 ,则 是 的( )重根。

    【单选题】下列有关喀斯特作用说法错误的是 ()

    【判断题】在物流功能之间,一种功能成本的削减会使另一种功能的成本增多。

    【单选题】人民检察院提起公诉的基本条件是( )

    【单选题】人民群众的基层自治起源于

    【单选题】函数调用的一般形式为:

    【判断题】凯恩斯认为,利率取决于货币供给与货币需求。( )

    【单选题】沟通一定是( )的。

    【单选题】白头翁是治疗哪种疾病的妙药?

    【判断题】律师可以泄露当事人的隐私。

    【多选题】小提琴可参与的演奏形式有 。

    【判断题】任诞指任性放纵,名士们主张言行不必遵守礼法,凭禀性行事,不做作,不受任何拘束,认为这样才能回归自然,才是真正的名士风流。

    【单选题】鸟类下蹲时,趾呈现出紧握状态,这与各肌腱的位置有关,它们位于各关节的( )

    【单选题】左甲状腺激素钠(常用优甲乐)的服用时间是

    【单选题】线性关系是指( )。

    【单选题】

    【单选题】Les deux femmes se sont _________ et se sont donné la main.( )

    展开全文
  • shell单引号与变量

    2020-12-23 14:41:09
    L]' echo '' echo -e "n" done 注:其实上面的脚本并能实现在10之前的数字前0的,因为本文主要是讲单引号引号和变量的关系的, 所以我这边也就没有修改。具体想在10之前的数字0,可以加一个if判断实现,也...

    近期公司申请了一大批连号的域名,我这里以test00.com~test99.com代替。配完DNS和A记录,接下来又

    轮到写apache的虚拟主机规则。这么多的域名一个一个去写肯定要搞死人的,脑子一转,计上心头。我们

    至少有N种方法去实现:

    首先想到的是利用宏来实现,比如平时我用宏最多的几个带宏功能的工具是vim、notepad++、UltraEdit-32

    还有word(不过word里的我到未经常用过),不过vim里N久没用,不记得了,在notepad小试了几下,没达

    到要的效果。

    接着想到利用shell定义一个函数来实现。不过公司这边催的太急,干脆也不用什么函数和宏了,直接最简单

    的shell里的echo吧 !不过在使用echo 时发现变量在单引号里是不传递的,这时想到要用两个单引号才行。

    具体代码如下:

    #!/bin/bash

    for ((site=00;site<100;site++))

    do

    echo ''

    echo ' ServerAdmin test@361way.com '

    echo ' DocumentRoot "d:/wwwroot/group/www.test'${site}'.com" '

    echo ' ServerName www.test'${site}'.com'

    echo ''

    echo ' Options FollowSymLinks'

    echo ' AllowOverride None'

    echo ' Order allow,deny'

    echo ' Allow from all'

    echo ' '

    echo ' '

    echo ' '

    echo ' ServerAdmin test@361way.com'

    echo ' ServerName test'${site}'.com'

    echo ' RewriteEngine on'

    echo ' RewriteRule ^(.*)$ http://www.test'${site}'.com$1 [R=301,L]'

    echo ''

    echo -e "n"

    done

    注:其实上面的脚本并不能实现在10之前的数字前加0的,因为本文主要是讲单引号双引号和变量的关系的,

    所以我这边也就没有修改。具体想在10之前的数字加0,可以加一个if判断实现,也可以通过另外一个工具printf

    实现,具体可以参看我的另外一个例子——批量显示00到99——给10之前的数加0。

    shell中单引号、双引号和两个双引号的区别,看下面的例子:

    [root@test] a=55

    [root@test] echo $a

    55

    [root@test] echo '$a'

    $a

    [root@test] echo ''$a'' #注意此处是两个单引不是一个双引

    55

    由上面的例子不难看出,双引号是不会屏蔽对变量和某些特殊符号的转义的,而单引号里的所有内容都会原封不对的输出

    ,而单引号里再用单引号将变量引起来,变量就又可以正常的显示,有点像数学里的负负为正。

    展开全文
  • 此语句在PL/SQL工具中运行成功,但是在SQLPLUS中执行报“ORA-01756: 引号内的字符串没有正确结束”错误! 因此,可以判断此语句是没有问题的!但是为何在SQLPLUS中执行会报错呢?我估计是有些参数没有设置好。但是...
  • I would like to add single quotes into an array of string. If I has 5 values.(1,2,3,4,5). I need like this '1','2','3','4','5'I have tried some like below but I am getting errorpublic class Main(){Str...
  • excel每个字段都引号,且以逗号分隔 excel选中某一空白列,然后输入公式如下: =" '"&A1&"', '"&B1&"', '"&C1&"', '"&D1&"', '"&E1&"'
  • 使用公式: 只单纯引号: ="’"&A1&"’" 引号和逗号: ="’"&A1&"’"&"," 如下图示
  • 如何在Java中为字符串添加双引号

    千次阅读 2021-03-06 13:05:13
    在Java中,所有用双引号引起来的内容都被视字符串,而用双引号引起来的文本则按原样显示。假设,如果要在字符串中添加双引号,则需要[ \“ ]转义序列来转义引号。让我们假设,如果我们有一个字符串“ Preeti”,...
  • 而在单引号充当转义角色时相对不好理解1、从第二个单引号开始被视转义符,如果第二个单引号后面还有单引号(哪怕只有一个)。select '''' from dual ----output:'解释:第二个单引号被作为转义符,第三个单引号被...
  • 我想从bash shell脚本中运行一个命令,该脚本在单引号和变量中包含单引号和一些其他命令。如repo forall -c '....$variable'。在这种格式中,对$进行转义,展开变量。我尝试了以下变体,但被拒绝:repo forall -c ...
  • $value='[\"050\",\"广东省\",\"GUANGDONG\"],[\"050020\",\"广州\",\"GUANGZHOU\"],[\"050030\",\"潮州\",\"CHAOZHOU\"],[\"050040\",\"东莞\",\"DONGGUAN\"],[\"050050\",\"佛山\",\"FOSHAN\"],[\"050060\",...
  • mysql中单双引号使用mysql中使用基本的DML类型的sql语句,“”和‘’是default string label symbols. 但是在实际情况中,经常出现下面的情况:一:查询情况SELECTbook_idFROMpdWHEREisbn='9787542739810'andbook_...
  • 接着判断字符串是否以引号结尾;最后再次利用substr()函数返回字符串其余部分即可。substr() 函数返回字符串的提取部分,如果失败则返回 FALSE,或者返回一个空字符串。(推荐教程:php图文教程)语法:substr(string,...
  • 而单引号则示意:这个了单引号的字段是一个字类似字符串,并区分大小写。单引号用于标识字符与数字的区别当指定字符串文本时,必须用单引号将字符串文本引住。Oracle10g之前,假如字符串文本里含有单引号,那么...
  • 在用Gitbook去写Markdown,对于要显示的效果:其中用反印号中包含了左右的花括号:http://{{server_address}}/ucows/login/login结果代码:* 我一般习惯用保存 接口的最后的...中间连续的两个花括号和花括号...
  • 使用concat 函数
  • 在动态拼接字符串时,我们常会用到字符拼接,我对拼接的引号不理解,如:1、'''+ id +''' 为什么是3个引号为什么左边一个加号右边一个加号(能能着重帮我解释下这个,详细点)sql codesum(case leave when '''+ id...
  • php如何去除双引号

    2021-03-24 08:40:01
    ”方法实现去除双引号即可。php去除双引号:代码示例:$s=str_replace('"', '', $str);直接替换就好了。相关介绍:str_replace() 函数替换字符串中的一些字符(区分大小写)。该函数必须遵循下列规则:如果搜索的字符...
  • 'world'] #指定切割字数(切割两次) print(s.split(' ',2)#输出结果是:['learn','python','hello world'] #根据l切割 print(s.split('l'))#输出结果是:['','earn python','he','o','w','rld'] 问题:为什么根据L...
  • 请注意MYSQL语句中的引号SQL #1: select * from uchome_feed where uid in('0',501...) order by dateline desc limit 0,50;SQL #2: select * from uchome_feed where uid in(0,501...) order by dateline desc ...
  • php如何去掉字符串前后的引号,字符串,引号,函数,然后再,结尾php如何去掉字符串前后的引号易采站长站,站长之家您整理了php如何去掉字符串前后的引号的相关内容。php去掉字符串前后的引号的方法是:可以先通过preg_...
  • 你可以试试这个正则表达式...这会将字符串拆分,然后是偶数个双引号.换句话说,它在双引号之外的逗号上拆分.如果你的字符串中有平衡的引号,这将有效.说明:, // Split on comma(?= // Followed by(?: // Start a non-...
  • --在ORACLE中,单引号有两个...从第二个单引号开始被视转义符,如果第二个单引号后面还有单引号(哪怕只有一个)。sql> select '''' result from dual;RESULT------'--第二个单引号被作为转义符,第三个单引号被转...
  • 我在最新版本的MySQL 5.1里也实验过,同样有这个问题,百思不得其解,为什么MySQL在检查到where后查询条件 字段是varchar,强制限制赋值必须用单引号,字母的可以检测到,但数字就不会。 MySQL为什么这样做: ...
  • php 如何过滤 单引号引号 $ < > 等N种特殊符号?谢谢mip版关注:200答案:4悬赏:20解决时间 2021-01-17 14:51已解决2021-01-17 00:42php 如何过滤 单引号引号 $ < > 等N种特殊符号?谢谢最佳答案...
  • 项目中遇到了一批引号的类JSON格式的字符串: {Name:Heal,Age:20,Tag:[Coding,Reading]} 需要将其解析成JSON对象, 然后插入到Elasticsearch中, 当作Object类型的对象存储起来. 在对比了阿里的FastJson、Google的...
  • 引号字符种种

    2021-05-11 10:17:10
    引号,这个存在于所有键盘上的符号,我最近发现我对它并了解。在我点击键盘上的引号按键时,得到的并总是同一个字符。常见的有这三种 ”〞”,这些看起来差不多的双引号对机器来说完全不同,而且差别仅仅是...
  • Python中字符串的索引方式,偏移量1,即第1个字符的索引0,而从第一个-1。在这里插入代码片 欢迎使用Markdown编辑器 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 156,958
精华内容 62,783
关键字:

为什么左加引号右不加