本系列为:MySQL数据库详解,为千锋资深教学老师独家创作
致力于为大家讲解清晰MySQL数据库相关知识点,含有丰富的代码案例及讲解。如果感觉对大家有帮助的话,可以【关注】持续追更~
文末有本文重点总结,技术类问题,也欢迎大家和我们沟通交流!
从今天开始本系列文章就带各位小伙伴学习数据库技术。数据库技术是Java开发中必不可少的一部分知识内容。也是非常重要的技术。本系列教程由浅入深, 全面讲解数据库体系。 非常适合零基础的小伙伴来学习。
全文大约【1404】 字,不说废话,只讲可以让你学到技术、明白原理的纯干货!本文带有丰富案例及配图视频,让你更好的理解和运用文中的技术概念,并可以给你带来具有足够启迪的思考...
在上一章节中我们讲解了索引的基本入门。那么在这一节中我们来探讨下索引的深层原理。各位小伙伴准备好了吗,我们开始喽!
索引的设计可以遵循一些已有的原则,创建索引的时候请尽量考虑符合这些原则,便于提升索引的使用效率,更高效的使用索引。
创建索引的原则:
对查询频次较高,且数据量比较大的表建立索引。
使用唯一索引,区分度越高,使用索引的效率越高。
索引字段的选择,最佳候选列应当从where子句的条件中提取,如果where子句中的组合比较多,那么应当挑选最常用、过滤效果最好的列的组合。
使用短索引,索引创建之后也是使用硬盘来存储的,因此提升索引访问的I/O效率,也可以提升总体的访问效率。假如构成索引的字段总长度比较短,那么在给定大小的存储块内可以存储更多的索引值,相应的可以有效的提升MySQL访问索引的I/O效率。
索引可以有效的提升查询数据的效率,但索引数量不是多多益善,索引越多,维护索引的代价自然也就水涨船高。对于插入、更新、删除等DML操作比较频繁的表来说,索引过多,会引入相当高的维护代价,降低DML操作的效率,增加相应操作的时间消耗。另外索引过多的话,MySQL也会犯选择困难病,虽然最终仍然会找到一个可用的索引,但无疑提高了选择的代价。
在mysql建立联合索引时会遵循最左前缀匹配的原则,即最左优先,在检索数据时从联合索引的最左边开始匹配,对列name列、address和列phone列建一个联合索引。
ALTER TABLE user ADD INDEX index_three(name,address,phone);
联合索引index_three实际建立了(name)、(name,address)、(name,address,phone)三个索引。所以下面的三个SQL语句都可以命中索引。
SELECT * FROM user WHERE address = '北京' AND phone = '12345' AND name = '张三';
SELECT * FROM user WHERE name = '张三' AND address = '北京';
SELECT * FROM user WHERE name = '张三';
上面三个查询语句执行时会依照最左前缀匹配原则,检索时分别会使用下面索引。进行数据匹配。
(name,address,phone)
(name,address)
(name)
索引的字段可以是任意顺序的,举个栗子:
-- 优化器会帮助我们调整顺序,下面的SQL语句都可以命中索引
SELECT * FROM user WHERE address = '北京' AND phone = '12345' AND name = '张三';
Mysql的优化器会帮助我们调整where条件中的顺序,以匹配我们建立的索引。
联合索引中最左边的列不包含在条件查询中,所以根据上面的原则,下面的SQL语句就不会命中索引。
-- 联合索引中最左边的列不包含在条件查询中,下面的SQL语句就不会命中索引
SELECT * FROM user WHERE address = '北京' AND phone = '12345';
最后在这里对本文核心要点进行总结:
如果你不习惯阅读技术文章,或是对文中的技术概念不能很好地理解,可以来看看视频教程。与本文配套的Java学习视频,戳蓝字一键直达
阅读本文大约需要1.1分钟。点击?小卡片,回复“合集”获取系统性的学习笔记和测试开发技能图谱背景 上篇文章《iOS真机安装WebDriverAgent图文详解》中提到如果使用付费版开发者证书去编译安装WDA,那么就不需要在手机上点击信任,这样更方便自动化测试的执行,今天就给大家详细分享一下如何申请个人付费开发者证书以及如何使用。基本概念在正式开始前,先给大家普及一下跟苹果开发者证书相关的一些基本概念。Certification和p12(证书)证书是对电脑开发资格的认证,每个开发者帐号有一套,分为两种:DeveloperCertification(开发证书):用于开发测试;DistributionCertification(发布证书):用于打包测试ipa或者Appstore的安装包;.cer是苹果的默认证书,在Xcode开发打包可以使用,如果在lbuilder、phonegap、HBuilder、AppCan、APICloud这些跨平台开发工具打包,就需要用到p12文件,或者多人开发的时候,本机用.cer,其他人用p12证书。.cer证书仅包含公钥,.p12证书可能既包含公钥也包含私钥,
TargetDataSourcepackagecom.apedad.example.annotation; importjava.lang.annotation.ElementType; importjava.lang.annotation.Retention; importjava.lang.annotation.RetentionPolicy; importjava.lang.annotation.Target; /** *用于扫描动态数据源的方法注解 *@version1.0 */ @Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) public@interfaceTargetDataSource{ StringdataSourceKey()default"master"; }复制TargetDataSourceParampackagecom.apedad.example.annotation; importorg.springframework.core.annotation.
编者按:本文作者辛昌浩,360奇舞团前端工程师。写在开头由于业务调整需要,最近接手了公司内部云平台的项目H。看了代码,开发了几个需求,我的第一感觉是,H项目真的是严肃又有历史感!因为它经过了好多位前端同学多年的开发与维护,“前任”小伙伴们在里面花费了大量的时间与精力。这里面涉及到的技术栈也错综复杂,包含了react、webpack、reflux、mobx以及不少手动封装的类库和组件,日积月累,已经包含了十几个子项目,代码体积可见一斑。发现问题随着时间的迁移和代码体积越来越庞大,开发体验的问题也就随之出现。比如,使用webpack-dev-server启动服务时,你可能需要等待90s;又比如,改一行代码调试bug时,你可能需要等待35s。这是在8g运行内存的MacBook上面的开发体验,如果你的电脑运行内存比这个低的话,可能会更久......额...,启动了一下项目,106秒...(综合一下更高的电脑配置,这里统一按90s计算)想象一下,改一个小bug,启动devServer,等90s,加一行代码保存,再等35s,果断不能忍?♂️。怀着内心的崇敬,以及小心谨慎的态度,我决定对它优化一波
文章转载自公众号:51CTO技术栈(ID:blog51cto)作者:刘晓明简介:互联网公司运维技术负责人,拥有10年的互联网开发和运维经验。一直致力于运维工具的开发和运维专家服务的推进,赋能开发,提高效能。最后给自己代个盐,欢迎大家有空时翻下我牌子(知乎号:布道,微信:AiDevOps),看看“开发运维”专栏的文章和公众号的文章,希望多些关注和点赞是给作者最好的鼓励!影片在未上映前,大规模的点映积攒了相当高的人气和口碑,截止7月9日凌晨:豆瓣评分:9.0分,猫眼:9.7分,淘票票:9.5分,时光网:8.8分。为什么我说这三个网站呢,因为我们今天近5000+条短评数据就来自于此,用专业的数据更有说服力。综合几家的数据:五星推荐如此之高,生活环境是真实的,情绪是真实的,困境也是真实的,甚至女主角是一个真实的上了年纪的美女,有真实的皱纹!真实才能带来沉浸体验。表面说的是药,深层说的是命。药能治病,命却不由自主,直面中国底层生命的苦难和尊严,也没有逃避对社会制度和商业法则的拷问,这是影片锲入中国现实的关键,也是引发大众共鸣的核心。盛世危言,却让人能看到希望,这部影片极有可能成为2018年最具有
作者|宋天龙,TrueMetrics合伙人出品|AI科技大本营(ID:rgznai100)导语:一切都始于1989年的那个圣诞节,Python的诞生并不算恰逢其时,它崛起充满了机遇巧合,也有其必然性。三十年间,Python技术不断更迭,生态逐渐完善,加上互联网、大数据、以及人工智能这一波波浪潮的推波助澜,Python渐渐从小众最终站上了现在的高度。从历史发展的角度出发,我们才能看清Python崛起的偶然性和必然性。本文将结合技术和产业的发展,全面透析Python的演进之路,帮助读者理解是什么造就了如今的Python。Python1.0时代:起源与诞生GuidovanRossum(下面简称Guido)是Python语言之父,他于1982年从阿姆斯特丹大学获得了数学和计算机硕士双学位,期间他接触了很多的语言,包括Pascal,C,Fortran等。在那个计算机资源贫乏的年代,像计算机一样思考并编程是每个程序员必须面对的事情,这让他非常苦恼;同时他又非常欣赏shell,shell简单易编程的特性让程序员更加专注于设计和逻辑本身,但shell本质上是一个功能的调用,它没有自己的数据类型,更无法
一、多层感知机MLP1、MLP概述对于含有单个隐含层的多层感知机(single-hidden-layerMulti-LayerPerceptron,MLP),可以将其看成是一个特殊的Logistic回归分类器,这个特殊的Logistic回归分类器首先通过一个非线性变换Φ\Phi(non-lineartransformation)对样本的输入进行非线性变换,然后将变换后的值作为Logistic回归的输入。非线性变换的目的是将输入的样本映射到一个空间,在该空间中,这些样本是线性可分的。这个中间层我们称之为隐含层(ahiddenlayer)。AsinglehiddenlayerissufficienttomakeMLPsauniversalapproximator. 2、MLP模型对于含有单隐层的MLP模型(也可以称为人工神经网络,ANN)可以由下图表示:在上图中,对于含有一个隐含层的MLP可以表示为:f:RD→RL f:R^D\rightarrowR^L其中,DD指的是输入向量xx的大小,LL表示的是输出向量f(x)f\left(x\right)的大小,输出向量f(x)f\left(x\r
springboot的打包方式有很多种。有打成war的,有打成jar的,也有直接提交到github,通过jekins进行打包部署的。这里主要介绍如何打成jar进行部署。不推荐用war,因为springboot适合前后端分离,打成jar进行部署更合适。 首先需要在application.properties当中配置端口server.port=8080#http://localhost:8088/swagger-ui.html复制marven的配置文件<?xmlversion="1.0"encoding="UTF-8"?><projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0http://maven.apache.org/xsd
在今日的GoogleI/O开发者大会上,之前闹得沸沸扬扬的AndroidVR,随着谷歌VR部门负责人ClayBavor登场揭开的谜底。然而,谷歌这次让外界“失望”了,并没有带来很“酷”的VR硬件产品,而是带来了一场“白日梦”——Daydream平台。Daydream是一款基于安卓系统的虚拟现实平台。据ClayBavor介绍,全新的AndroidN系统将直接内置了Daydream,用户无需重复下载该应用。想要进入DaydreamVR体验很简单,用户只需将手机与支持Daydream的VR头戴设备连接,“VR模式”就自动开启,使手机成为VR平台的“大脑”。另外,将手机和DaydreamVR头戴设备连接成功并锁定,你就可以任意转动头部方向在DaydreamVR平台的主页面进行浏览。在这个VR平台上,你可以使用安装好的应用和游戏,也可以进入PlayStore下载新应用。Daydream平台让用户不仅在使用头盔的时候能够连接到应用,还可以获得内容。首先,谷歌旗下的服务如YouTube、街景、PlayMovies、PlayStore和GooglePhotos等都将率先推出VR版的应用。其次,CNN、
ansiblecommand与shell模块两个模块都是用于执行linux命令的,这对于命令熟悉的工程师来说,用起来非常high。shell模块与command模块差不多(command模块不能执行一些类似$HOME,>,<,|等符号,但shell可以)https://docs.ansible.com/ansible/latest/modules/command_module.htmlhttps://docs.ansible.com/ansible/latest/modules/shell_module.html一、shell模块[root@manage01~]#ansible-mshell192.168.98.201-a"ls/root" 192.168.98.201|CHANGED|rc=0>> 公共 模板 视频 图片 文档 下载 音乐 桌面 anaconda-ks.cfg initial-setup-ks.cfg nginx.service nginx_study [root@manage01~]#ansible-mshell192
背景: 第一次部署nexus,jenkins推送依赖至nexus成功, 过了几天更新了代码再次推送结果报错 报错如标题,截图如下: 开始解决把: 第一次能部署成功,nexus也是有能找到第一次部署推送文件 下图是jenkins第一次推送页面截图: 以下是nexus推送的依赖截图; 问了研发以及组内同事,都没更改过代码以及私服nexus和jenkins配置,奇怪了。这时一个研发大佬说报错400是不是 nexus问题,导致推送不上去,看报错也是repositories文件传输失败。 果然是这里问题,nexus第一次搭建部署成功了,它默认配置是不允许再次重新部署推送的,修改可以重更新推送即可。 修改这个。 最后再看jenkins推
第一次读重构-改善既有代码的设计(Refactoring:ImprovingtheDesignofExistingCode)这本书还是在学校的时候,那个时候刚开始写Java代码,师兄推荐了两本书《重构》、《设计模式》。在今日看来,这两本书都是经典好书,得谢谢我的师兄。 最近,打算重新读一下这两本书,先读了重构,感觉还是收获颇多。想来这两本书都是比较偏向实践的,并不是读一遍就可以束之高阁了,而是应该常读常新。 本文地址:https://www.cnblogs.com/xybaby/p/12894470.html 去年重读了代码整洁之道这本书,也写了一篇笔记什么是整洁的代码。今年重读《重构》的时候,发现书中很多内容都是相同的,作者好像都是叫Martin什么的,我还想难道是同一个人? 查了一下,并不是,重构的作者是MartinFowler;而cleancode的作者是RobertC.Martin,江湖人称"UncleBob"。 不过好像两位都在面向对象、敏捷领域有所建树。Bytheway,重构的第一版写于1999年,(本文也基于第一版的译文),而cleancode的第一版写于2009年
一、什么是慢查询慢查询,顾名思义,执行很慢的查询。有多慢?超过long_query_time参数设定的时间阈值(默认10s),就被认为是慢的,是需要优化的。慢查询被记录在慢查询日志里。慢查询日志默认是不开启的。如果需要优化SQL语句,就可以开启这个功能,它可以让你很容易地知道哪些语句是需要优化的。 1️⃣showvariableslike'slow_query_log';查询是否开启慢查询日志【开启慢查询sql:setglobalslow_query_log=1/on;】【关闭慢查询sql:setglobalslow_query_log=0/off;】2️⃣showvariableslike'log_queries_not_using_indexes';查询未使用索引是否开启记录慢查询日志【开启记录未使用索引sql:setgloballog_queries_not_using_indexes=1/on】【关闭记录未使用索引sql:setgloballog_queries_not_using_indexes=1/off】3️⃣showvariableslike'long_query_ti
SpringSecurity本质上是一连串的Filter,然后又以一个独立的Filter的形式插入到FilterChain里,其名为FilterChainProxy。如图所示。 实际上FilterChainProxy下面可以有多条FilterChain,来针对不同的URL做验证,而FilterChain中所拥有的Filter则会根据定义的服务自动增减。所以无需要显示再定义这些Filter,除非想要实现自己的逻辑。 关键类 Authentication Authentication是一个接口,用来表示用户认证信息,在用户登录认证之前相关信息会封装为一个Authentication具体实现类的对象,在登录认证成功之后又会生成一个信息更全面,包含用户权限等信息的Authentication对象,然后把它保存在SecurityContextHolder所持有的SecurityContext中,供后续的程序进行调用,如访问权限的鉴定等。 AuthenticationManager 用来做验证的最主要的接口为AuthenticationManager,这个接口只有一个方法: publicint
.title{text-align:center;margin-bottom:0.2em} .subtitle{text-align:center;font-size:medium;font-weight:bold;margin-top:0} .todo{font-family:monospace;color:rgba(255,0,0,1)} .done{font-family:monospace;color:rgba(0,128,0,1)} .priority{font-family:monospace;color:rgba(255,165,0,1)} .tag{background-color:rgba(238,238,238,1);font-family:monospace;padding:2px;font-size:80%;font-weight:normal} .timestamp{color:rgba(190,190,190,1)} .timestamp-kwd{color:rgba(95,158,160,1)} .org-right{margin-left:
摘要: 配置nginx反向代理jira并实现https配置Tomcat在本文中,我们设置可以在地址http://jira.aniu.so/jira(标准HTTP端口80)上访问JIRA,而JIRA本身可以使用上下文路径/jira监听端口8080。 配置nginx反向代理jira 配置Tomcat 修改配置文件server.xml(在jira安装目录下) 更改前: <ContextdocBase="${catalina.home}/atlassian-jira"path=""reloadable="false"useHttpOnly="true">更改后:<ContextdocBase="${catalina.home}/atlassian-jira"path="/jira"reloadable="false"useHttpOnly="true">复制 配置连接器 添加proxyName和proxyPort元素(用适当的属性替换它们),以及下面的另一个连接器——这用于故障排除,以绕过代理: <!--NginxProxyConnector--
更新数据:updata 语法: update表名set字段1名字=字段一的值,字段2的名字=字段2的值where条件。 8.3.2更新所有数据 #(1)将所有人的成绩设置为100 updatetb_usersetscore=100; 8.3.3根据条件更新 #(2)将学号是6的学生,成绩设为59 updatetb_usersetscore=59whereid=5; #(3)将名字为cx的学生,成绩设置60 updatetb_usersetscore=60wherename='cx'; 8.3.4更新多个字段 #(4)将学号是5的学生,成绩设为99,名字‘xx’ updatetb_usersetscore=99,name='xx'whereid=5; #(5)将所有人成绩减去10分 updatetb_usersetscore=score-10; &nbs
这个是项目大致结构 1.原始mybatis的config.xml配置文件 2.整合到spring的配置文件中,注意如果配置了maxActive可能会报错,所在在这都注销了。 数据库的连接地址是写在db.properties文件中,注意文件的结尾必须是properties.这个好像是约定文件. <!--扫描器--><context:component-scanbase-package="mapper,dao,service"></context:component-scan> <!--//@Service("studentService")相当于<beanid="studentService"class="service.StudentServiceImpl"></bean>@Service("studentService")publicclassStudentServiceImplimplementsStudentService{ @Autowired privateS
声明:本篇博客翻译自:https://www.codeproject.com/Articles/1111680/equalsequals-VS-Equals-in-Csharp 由于水平(技术水平+英语理解能力)有限/不足,肯定会有所疏漏/错误,请及时指正。 介绍: 在C#中,可以使用“==”和一个可重载的"Equals()"方法来对变量进行比较。但是很多开发者并不知道两者之间的区别。在这篇博客中将讨论两者之间的区别和两者的使用场景。"=="和"Equals()"比较没有区别除了在做string的比较时。 比较规则:C#中的比较无非是对值类型和引用类型进行比较。当对值类型进行比较时,比较的是值类型的“内容”;当对引用类型进行比较时,比较的是对象的引用是否相同(内存地址)而不是“内容”。上述规则对"=="和"Equals()"均适用。 场景一:值类型比较 当对值类型(int,double,byteetc)进行比较时,"=="和"Equals()"都是基于值类型的内容比较。当值类型的内容相同,则两者相等。 Console.WriteLine("ValueTypeCompare...");
原文链接:https://www.cnblogs.com/ctjcalc/p/post5.html FHQTreap是什么? Copyright©2019ctjcalc,转载请注明URL,并给出原文链接,谢谢。 `FHQTreap`,又名`无旋Treap`,是一种不需要旋转的平衡树,是**范浩强**基于`Treap`发明的。`FHQTreap`具有代码短,易理解,速度快的优点。(当然跟红黑树等更高级的平衡树比一下就是……)至少它在`OI`中算是很优秀的数据结构了。 前置知识: C++ 二叉搜索树的基本性质,下面会讲 二叉堆 二叉搜索树的基本性质 很简单,就这几个。 在二叉搜索树中,每个结点都满足左子树的结点的值都小于等于自己的值,右子树的结点的值都大于自己的值,左右子树也是二叉搜索树。 中序遍历二叉搜索树可以得到一个由这棵树的所有结点的值组成的有序序列。(即所有的值排序后的结果) 原理&代码实现 本文中,Treap就是指有旋Treap。 FHQTreap不是通过旋转来保持平衡的,而是通过两个函数split和merge。顾名思义,split就是分裂,merge