首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

后端程序员必备:MySql索引失效的十大杂症

mysql是有优化器的,处于效率与成本考虑,遇到or条件,索引失效,看起来也合情合理嘛。 注意: 如果or条件的列都加了索引,索引可能会走的,大家可以自己试一试。...这是因为不加单引号时,是字符串数字的比较,它们类型不匹配,MySQL会做隐式的类型转换,把它们转换为浮点数再做比较。 三、like通配符可能导致索引失效。...=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8; like查询%开头,索引失效,如图: ?...把%放后面,发现索引还是正常走的,如下: ? 把%加回来,改为只查索引的字段(覆盖索引),发现还是走索引,惊不惊喜,意不意外 ? 结论: like查询%开头,会导致索引失效。...这它的优化器有关,来看一下它的逻辑架构图吧(图片来源网上) ? 总结 总结了索引失效的十大杂症,在这里来个首尾呼应吧,分析一下我们生产的那条慢sql

63810

SQL基础编程_如何学编程

开头 like 'X%' X结尾 like '%X' 包含X like '%X%' eg:使用SQL的条件表达式搜索那个叫做ca...的游戏英雄的全部属性 select * from...s.销售订单_日期_月 = 11 select sum(s.销售数量)/count(客户_ID) as '11月平均每笔订单销量' from 销售 as s where s.销售订单_日期_月 = 11...p group by p.销售订单_日期_月 结果如下: (2) 显示方式控制函数: round——控制保留位小数的结果 由avg()函数中的结果得知,小数点后面有很多位,如果我们想要保留两位小数可以用..._ID连接,产品表销售表可以通过产品_代码连接,于是最终结果客户和产品表通过销售表连接在一起。...= B.id1 C on A.id2 = C.id2 应用:通过电子专卖店数据库,对比2018年6,7,8月份的销售额,要求保留小数后两位,总销售额亿为单位。

1.6K30
您找到你想要的搜索结果了吗?
是的
没有找到

统计师的Python日记【第九天:正则表达式】

(text) \w表示单词字符,*表示匹配前面的表达式0次或无限次,\w*也就是匹配一个单词0次或无限次,'Sh\w*'这个元字符的意思就是:匹配Sh开头后面跟着N个单词字符的文本(N取0到无穷)...Sh开头的两个单词都被匹配出来了。 search() findall类似,findall返回的是字符串中所有的匹配项,search则只返回第一个匹配项,的起始位置和结束位置!...(未显示完) 也就是开头的问题,这一份产品列表,现在只想要数字编码、也就是红色字体的部分。如何操作?...先来分析一下: 首先两个PD不是必须的,有的有、有的没有,但后面(XX)括号里面两个数字是必须的,我就按照这样的模式来获取红色字体部分: pattern = re.compile('P?D?...哎呀,只有一列,我不知道每个数字原来的哪个对应啊,我得把原数据也加上: pattern = re.compile('P?D?\D(\d{2})\D\s?

1.8K40

Mysql优化秘籍心法

在开始介绍如何优化sql前,先附上mysql内部逻辑图大家有所了解 (1)连接器:主要负责客户端建立连接,获取权限,维持和管理链接。...对于limit m,n的分页查询,越往后面翻页(即m越大的情况下)SQL的耗时会越来越长,对于这种应该先取出主键id,然后通过主键id和原表进行join关联查询。...优化Group BY语句 如果对group by语句的结果没有排序要求,要在语句后面加 order by null(group 默认会排序); 尽量group by过程用上表的索引,确认方法是explain...11. 尽量使用数字型字段 若只含数值信息的字段尽量不要设计为字符型,这会降低查询和连接的性能。引擎在处理查询和连接时会逐个比较字符串中每一个字符,而对于数字型而言只需要比较一次就够了。 12....在实际中尽量不要使用null(避免在where子句中对字段进行null值判断) 不过在mysql的高版本已经做了优化,允许使用索引 对于null的判断会导致引擎放弃使用索引而进行全表扫描 7. like通配符开头

96120

12个MySQL慢查询的原因分析「建议收藏」

这是因为不加单引号时,是字符串数字的比较,它们类型不匹配,MySQL 会做隐式的类型转换,把它们转换为浮点数再做比较。隐式的类型转换,索引会失效。...like 查询 % 开头,索引失效 explain select * from user where userId like ‘%123’; 把 % 放后面,发现索引还是正常走的,如下: explain...select * from user where userId like ‘123%’; 既然 like 查询 % 开头,会导致索引失效。...我们如何优化呢? 使用覆盖索引 把 % 放后面 2.4 查询条件不满足联合索引的最左匹配原则 MySQl 建立联合索引时,会遵循最左前缀匹配的原则,即最左优先。...一般有更新 SQL 才可能会导致脏页,我们回忆一下:一条更新语句是如何执行的 7.2 一条更新语句是如何执行的? 以下的这个更新 SQL如何执行的呢?

1.3K50

第一章 python入门

相互转化 GBK可以转变成unicode Unicode做中文处理的时候可以与GBK转化 1.变量必须由字母数字下划线组成 2.数字不能作为开头 3.不能是python中的关键字,最好不要python...=比较的是vlaue 2.is 比较的是id 强调:1.id相同,意味着typevalue必定相同 2.value相同type不也相同,id可能不相同:...5.判断什么结尾,什么开头 test='alex' test.endwith('a',1,3) 看alex 在它的第二个位置到第四个位置是不是以a结尾的(包括第四个位置) test.startwith...('a') 看alex是否a开头 6.寻找目标所在位: test='alexalex' v=test.find('ex',1,4) 在第二个位置第五个位置寻找ex在哪个位置(不包括第五个位置),...] 11.删除指定位置元素,并且可以获取到这个元素 li=[1,2,3] v=li.pop() print(v)输出的是3 v=li.pop(1)删除第二个位置的元素,并获取这个值赋值给v 12.删除指定元素

54611

MySQL数据库规约.

2、表名、字段名必须使用小写字母或数字, 禁止出现数字开头,禁止两个下划线中间只出现数字。数据库字段名的修改代价很大,因为无法进行预发布,所以字段名称需要慎重考虑。 3、表名不使用复数名词。...正例: 先快速定位需要获取id 段,然后再关联: SELECT a.* FROM 表 1 a, (select id from 表 1 where 条件 LIMIT 100000,20 ) b where...a.id=b.id 6、SQL 性能优化的目标:至少要达到 range 级别, 要求是 ref 级别, 如果可以是 consts最好。...说明: 如果一本书需要知道第 11 章是什么标题,会翻开第 11 章对应的那一页吗?目录浏览一下就好,这个目录就是起到覆盖索引的作用。...三、SQL语句 1、不要使用 count(列名)或 count(常量)来替代 count(*), count(*)是 SQL92 定义的标准统计行数的语法,数据库无关, NULL 和非 NULL 无关

1.3K50

老司机总结的12条 SQL 优化方案(非常实用)

语句及索引的优化 SQL语句的优化 索引的优化/如何避免索引失效 二、数据库表结构的优化:使得数据库结构符合三大范式与BCNF 三、系统配置的优化 四、硬件的优化 ---- 在开始介绍如何优化sql前...,先附上mysql内部逻辑图大家有所了解 (1)连接器: 主要负责客户端建立连接、获取权限、维持和管理连接 (2)查询缓存: 优先在缓存中进行查询,如果查到了则直接返回,如果缓存中查询不到,在去数据库中查询...对于 limit m, n 的分页查询,越往后面翻页(即m越大的情况下)SQL的耗时会越来越长,对于这种应该先取出主键id,然后通过主键id原表进行Join关联查询。...7.like 通配符开头(%abc..)时,mysql索引失效会变成全表扫描的操作。 所以最好用右边like ‘abc%’。...11.SQL 性能优化 explain 中的 type:至少要达到 range 级别,要求是 ref 级别,如果可以是 consts 最好。

85630

没想到 Shell 命令竟然还能这么玩?| Shell 玩转大数据分析

期间自己还闹了个大乌龙,这我明白了一个道理:类似这种需要 “隐藏自己真实身份”的推理游戏的秘诀就是彻底忘记自己的身份,不仅能骗过“敌人”,还能让“队友”,甚至拥有 “上帝视角”的“法官” 也懵逼到“...另外,本部门最近急招P6/P7技术岗,热烈欢迎感兴趣的同学联系我啊,下次团建咱们一起去 ,一起来玩德州扑克,我们都很菜的,很容易就能赢咱们。...如果你对 Shell 很熟悉,那真的是分分钟,应该是秒秒钟就能获取答案。就算用 Shell 来实现,不同的人可能也有不同的写法,后面我就列举其中的一种来解决这些问题。..."name": "杨效丰", 套路之前差不多的,我这边就不特别指出了。...,后面的套路又一样了。

59040

盘点MySQL慢查询的12个原因

这是因为不加单引号时,是字符串数字的比较,它们类型不匹配,MySQL会做隐式的类型转换,把它们转换为浮点数再做比较。隐式的类型转换,索引会失效。...like查询%开头,索引失效 explain select * from user where userId like '%123'; 把%放后面,发现索引还是正常走的,如下: explain select...* from user where userId like '123%'; 既然like查询%开头,会导致索引失效。...我们如何优化呢? 使用覆盖索引 把%放后面 2.4 查询条件不满足联合索引的最左匹配原则 MySQl建立联合索引时,会遵循最左前缀匹配的原则,即最左优先。...一般有更新SQL才可能会导致脏页,我们回忆一下:一条更新语句是如何执行的 7.2 一条更新语句是如何执行的? 以下的这个更新SQL如何执行的呢?

76420

Shell 正则表达式及综合案例及文本处理工具

| grep r.t cat /ect/passwd | grep r..t 例子4:查询包含字符r开头,t结尾的字符串 cat /etc/passwd | grep r....}$ 大于小于11数字都是不符合的  四、案例之归档文件 实际生产应用中,往往需要对重要的数据进行归档备份 需求:实现一个目录归档备份的脚本,输入一个目录名称,将目录下所有文件按天归档保存,并将归档日期附加在文档文件名上...P选项代表允许我们使用绝对路径进行归档。...因为ip在第十列,因此-f后面10;整体写法如下: ifconfig ens33 | grep netmask | cut -d " " -f 10 2. awk工具 一个强大的文本分析工具,把文件逐行的读入...搜索passwd文件root关键字开头的所有行,并输入该行的第1列和第7列,中 间","分割 cat /etc/passwd | awk -F ":" '/^root/ {print 3

31530

盘点MySQL慢查询的12个原因

这是因为不加单引号时,是字符串数字的比较,它们类型不匹配,MySQL会做隐式的类型转换,把它们转换为浮点数再做比较。隐式的类型转换,索引会失效。...like查询%开头,索引失效 explain select * from user where userId like '%123'; 把%放后面,发现索引还是正常走的,如下: explain select...* from user where userId like '123%'; 既然like查询%开头,会导致索引失效。...我们如何优化呢? 使用覆盖索引 把%放后面 2.4 查询条件不满足联合索引的最左匹配原则 MySQl建立联合索引时,会遵循最左前缀匹配的原则,即最左优先。...一般有更新SQL才可能会导致脏页,我们回忆一下:一条更新语句是如何执行的 7.2 一条更新语句是如何执行的? 以下的这个更新SQL如何执行的呢?

1.3K10

PLSQL基础语法

2、标识符只允许字母、数字、下划线,并且字母开头。 3、不能使用保留字,与保留字同名必须使用双引号括起来。 4、END后需要使用分号结束。 5、字符类型和日期类型需要使用单引号括起来。...建议的写作规范: 1、命名应以“_”的连接方式,而不是用大小写混合的方式,如:p_id(表示名字为id,"p"表示它是一个参数)。 2、变量前最好加上前缀,表示该变量的数据类型、作用范围等。...5、逗号后面以及操作符前后都应加空格。...2、搜索式Case语句 搜索式与简单case语句的一个不同是:搜索式when后面的是表达式,简单式后面的是值。...LOOP; END; 八、异常处理 定义当DML语句发生异常时,如何处理。

2.5K110

Django ORM

:如果在url后面写路径没有写/,那么会自动补充/,相当于跳转页面,如果不想使用该特性,可以在setting.py文件中取消:APPEND_SLASH = False 下例中,我们分别path和re_path...定了两个urls,它们是等效的,把文章的id(整数类型)传递给了视图。...re_path里引号前面的小写r表示引号里为正则表达式, ^代表开头,$代表结尾,\d+代表正整数 # blog/urls.py from django.urls import path, re_path..., id): # 展示某篇文章 在使用path和re_path方法设计urls需注意: url中的参数名要用尖括号,而不是圆括号; 匹配模式的最开头不需要添加斜杠/,但建议斜杠结尾; 使用re_path...P\d+)/',views.index,name='index_name') 2、前端 # 只要给个数字即可

4K10

SQL学习之MYSQL的常用命令和增删改查语句和数据类型

table1 drop index ind_id11、联合字符或者多个列(将列id与":"和列name和"="连接)  select concat(id,':',name,'=') from students...有3中模式,0:不缓存;1:缓存查询,除非与 select sql_no_cache开头;2:根据需要只缓存那些select sql_cache开头的查询; query_cache_size:设置查询缓存的最大结果集的大小...设为长度为3的数字字段:int(3)并它每个记录自动加一:auto_increment并不能为空:not null而且他成为主字段primary key(2)将NAME设为长度为10的字符字段(3)...="select sum(字段名) as 别名 from 数据表 where 条件表达式"  set rs=conn.excute(sql)  用 rs("别名") 获取统的计值,其它函数运用同上。 ...意思是把ID11的UID 改成kenchen  Delete 删除语句  Delete from 表命 where limit   Delete from text where id=3 意思是把ID

2.4K60

SQL注入的绕过方式

and 发现并没有拦截,但是如果在 and 后面空格然后跟 updatexml 直接被拦截 这里我们的绕过方法是用运算符,and (+-/^)发现并没有被拦截 `keywords=11'and-updatexml...()` Other Updatexml参数为数字时被拦截 `keywords=11'and-updatexml(1,1,1)` Other 这里可以使用16进制或者科学计数法0x1或1e1 `keywords...=11'and-updatexml(0x1,,0x1)` Other 我们首先闭合一下后面的单引号,在后面加上and'他配合原有的单引号把%包裹起来 `keywords=11'and-updatexml...(0x1,,0x1)and'` Other 现在我们来构造报错内容,concat函数被拦截,这里使用 concat_ws()函数,将后面的参数用第一个值来分割,然后配合@@datadir输出路径 `11...'and-updatexml(0x1,concat_ws(1,0x7e,@@datadir),0x1)and'` Other 中间件特性绕过WAF 首先通过-1 /1/0运算判断出存在数字sql

75820

【死磕Sharding-jdbc】---SQL解析-词法分析

type:Literals.IDENTIFIER,literals:user_id`, endPostion:16}**; isHexDecimalBegin() -- 是否16进程符号开头,即0x。...() -- 是否数字开头,即0~9,例如这种SQL:select 'afei' from t_user limit 1,limit 1这个1就是数字,解析到limit后面的1的时候,得到的token为{...type:Literals.INT, literals:1, endPostion:33} isSymbolBegin() -- 是否特殊符号开头,例如这种SQL:select user_id from...构造这种异常很简单,只需要定义的SQLMySQLKeyword中的关键词开头即可,例如"show create table t_order o" if (!...构造这种异常很简单,只需要定义的sqlDefaultKeyword中的关键词开头,且不是下面枚举的关键词即可,例如"DATABASE SELECT o.* FROM t_order o"

1K20

_Shell 正则表达式及综合案例及文本处理工具

r.t cat /ect/passwd | grep r..t例子4:查询包含字符r开头,t结尾的字符串 cat /etc/passwd | grep r....$大于小于11数字都是不符合的 四、案例之归档文件实际生产应用中,往往需要对重要的数据进行归档备份 需求:实现一个目录归档备份的脚本,输入一个目录名称,将目录下所有文件按天归档保存,并将归档日期附加在文档文件名上...P选项代表允许我们使用绝对路径进行归档。...添加描述因为ip在第十列,因此-f后面10;整体写法如下: ifconfig ens33 | grep netmask | cut -d " " -f 10 2. awk工具一个强大的文本分析工具,...搜索passwd文件root关键字开头的所有行,并输入该行的第1列和第7列,中 间","分割 cat /etc/passwd | awk -F ":" '/^root/ {print 3.

21610
领券