400-888-0545
V6.4版本计划
有创意,就创造,让信息化建设更便捷更高效
O2OA是基于JavaEE分布式架构的全平台,全终端,国产化开源低代码开发平台。平台拥有5个核心系统以及多个内置应用,能够让开发者根据客户需求按需定制、零代码快速实现复杂业务管理,和现有组织架构、基础数据、权限体系形成一体化业务建模。
开发方式及特点
1. 平台全功能源码公开(包括移动端),官方承诺无任何功能和人数限制。
2. 可视化开发,流程、表单编辑所见即所得,界面样式支持灵活定制,可集成Vue,React以及Angular。
3. Nashorn引擎,支持直接使用JavaScript完成服务代码编写并且发布使用。
4. 支持第三方以Restful服务方式驱动和管理流程,支持平台与第三方服务的数据交互。
5. 支持私有化部署、内网部署,支持传输加密,数据更安全。
6. 提供原生的IOS/Android应用, 并且支持WeLink、钉钉和企业微信集成。
How to Start

windows

1.下载o2server. yyyyMMddHHmmss_ windows.zip程序包.
2.解压下载后的压缩包到任意目录
3.确认开通服务器的80、20020、20030端口
4.打开o2server文件夹,选择start_ windows.bat双击打开
5.启动服务,等待相关服务自动完成.
6.自动完成后打开浏览器访问http://127.0.0.1
7.输入用户名xadmin密码o2登陆系统

linux

1.下载o2server. yyyyMMddHHmmss_linux.zip程序包.
2.确认开通服务器的80、20020、20030端口
3."unzip o2server. syyyMMddHHmmss linux.zip" 解压程序包.
4."cd o2server. yyyMMddHHmmss_ linux" 进入解压目录
5."cd o2server"进入程序目录.
6."./start. linux.sh" 回车启动服务器控制台.
7.启动服务,等待相关服务自动完成.
8.自动完成后打开浏览器访问http://127.0.0.1
9.输入用户名xadmin密码o2登陆系统

Configure The Compilation Environment

JVM 下载

安装NodeJS

1. 访问nodejs的官方网站的downdolad,网址:https://nodejs.org/en/download/,获取Linux Binaries (x64)安装包下载链接:

wget https://nodejs.org/dist/v10.15.0/node-v10.15.0-linux-x64.tar.xz

2. 解压安装:

# yum search xz # yum install xz.i386
# xz -d node-v10.15.0-linux-x64.tar.xz
# tar -xf node-v10.15.0-linux-x64.tar
# mv node-v10.15.0-linux-x64 node-v10.15.0

3. 配置nodejs(略)

安装 Java11 及配置Java环境

安装 apache-maven-3.6.0 及配置maven环境

wget http://repos.fedorapeople.org/repos/dchen/apache-maven/epel-apache-maven.repo -O /etc/yum.repos.d/epel-apache-maven.repo

Source Code Compilation

1、打开命令提示工具,cd到o2oa/o2server目录cd /usr/o2oa/o2server
2、执行命令进行编译: mvn install,开始进行源码编译mvn install

关于编译错误

o2oa/o2server/target目录下会有打包好的zip包,将此zip包Copy到其他目录解压(避免目录层级太深造成启动异常),
服务器部署和后动相关的教程文档, 请移步系列教程: https://my.oschina.net/u/3931542/blog/2209110

程序人生
5/10 第1
Edge for Linux 将于 10 月发布首个预览版本
在 9 月 22 日开幕的 Ignite 2020 大会上,微软宣布 Linux 版 Edge 将于今年 10 月开始在 Dev 预览频道中提供。这是继 5 月份的 Build 2020 开发者大会以来,Microsoft Edge for Linux 首次有新的消息传出。届时,Linux 用户可以通过 Microsoft Edge Insiders 网站,或是从本地 Linux 程序包管理器下载预览。微软将从 Ubuntu 和 Debian 发行版开始,随后会陆续支持 Fedora 和 openSUSE。此次微软在 Ignite 2020 大会上着重阐述了将 Edge 打造为企业型浏览器的愿景。新功能包括更多样的管理模式、更流畅的工作体验,以及经典 Edge 中的信息亭模式等等。微软还强调了 Edge 浏览器的安全性,并称,“对于使用 Windows 10 的企业而言,它比 Chrome 更加安全”。根据国外科技媒体 VentureBeat 对 Edge 项目经理 Kyle Pflug 的采访,微软将 Edge 引入 Linux “并不是为了增加市场份额,而是让企业可以选择将单个浏览器部署到其所有员工设备上的一种方法”。企业客户希望将一个浏览器解决方案部署到组织中,Pflug 表示 Edge 能够为需要 Linux 解决方案的用户提供解决方案。另一方面,微软也很希望企业开发者使用 Edge for Linux,主要目标是降低企业的测试成本。Pflug 提到,Linux 上的 Edge 是他们为 Web 开发者减少碎片和测试开销的策略之一。通过跨平台提供相同的渲染行为和工具,开发者可以在自己喜欢的环境中构建和测试网站及 Web 应用。10 月发布第一个预览版本后,Linux 版 Edge 将与 Windows 和 macOS 上的 Dev 通道同步发布每周构建。至于具体的时间表,微软还未公布。转载自:https://www.oschina.net/news/118800/microsoft-edge-linux-is-coming-in-october
23
2020-09
《GB∕T 33190-2016 电子文件存储与交换格式 版式文件》OFD标准学习及应用
OFD标准介绍什么是OFDOFD(Open Fixed-Layout Document) 是电子文件管理的基础标准之一,由于其固定版式呈现的特点,各类文档排版后的固化结果都可使用本标准来承载 ;同时对于各行业管理中有关元数据、语义、数字签名等要求,本标准也提供相应的可扩展机制予以支持。OFD作为基础标准在版式文档范畴内反映了行业管理要求,提供了足够的扩展性,与行业应用中的标准规范是并行的,各行业规范只在版式文档存储格式方面引用本标准。OFD版式文件具有以下特点:(1)采用XML技术描述文本数据,采用“容器+文档”的方式描述和存储数据;(2)真实地保持原有文档中文字、图表、公式、色彩等版式信息,且这种特性不随平台变化而改变;(3)采用二维向量图像模型,可以描述包括文字、图形、图像等经过精密排版的页面像素;(4)国家层级的自主版式格式,实现了文档的原始内容和批注附加内容的分离保存 OFD学习资源可在国家标准全文公开系统预览《GB∕T 33190-2016 电子文件存储与交换格式 版式文件》标准内容;OFD阅读器厂商:北京数科网维,航天福昕软件OFD格式转换:北京数科网维文档转换预览,福昕OFD版式办公套件安装完成后可通过虚拟打印机转换为OFD格式,永中DCS  在OFD文件中添加档案章  准备工作:档案章图片(生成细节略)、OFD文件、Visual Studio IDE OFD文件解压可将文件后缀名改为zip再解压以查看OFD文件的层次结构。实际编码中需要引入System.IO.Compression.ZipFile包。   文件说明OFD.xml文件主人口文件,一个包内存在且只存在一个OFD.xml 文件,此文件名不应修改Doc_0/Document.xml文档的根节点Doc_0/DocumentRes.xml文档自身资源索引Doc_0/PublicRes.xml文档公共资源索引Doc_0/Pages/Page_0/Cotent.xml文档第0 页的内容描述Doc_0/Res/seal.png文档资源文件 ZipFile.ExtractToDirectory(ofd文件路径, 解压目录); 读取相关数据注意:OFD标准中XML文档使用的命名空间为http://www.ofdspec.org/201 6,其标识应为ofd;应在包内各XML文档的根节点中声明defaults:ofd。元素节点应使用命名空间标识,元素属性不使用命名空间。   有些厂商转换的OFD文件命名空间为http://www.ofdspec.org或其它,因此需要根据文件指定的命名空间来读取和写入数据。 IDXML文件XPath数据1OFD.xmlofd:OFD/ofd:DocBody/ofd:DocRoot主入口文件路径2Document.xmlofd:Document/ofd:CommonData/ofd:MaxUnitID文档全局自增ID3Document.xmlofd:Document/ofd:CommonData/ofd:DocumentRes资源文件路径4Document.xmlofd:Document/ofd:Pages/ofd:Page[1]首页路径5DocumentRes.xmlofd:Res/ofd:MultiMedias/ofd:MultiMedia/ofd:MediaFile[text()='seal.png']档案章图片名称6DocumentRes.xmlofd:Res/ofd:MultiMedias/ofd:MultiMedia/ofd:MediaFile[text()='seal.png']/..档案章图片资源ID7Content.xmlofd:Page/ofd:Area/ofd:PhysicalBox页面尺寸信息 写入数据(1)     将六格档案章图片复制到解压目录相对路径Doc_N/Res下,Doc_N由数据1决定;(2)     DocumentRes.xml文件ofd:Res/ofd:MultiMedias路径下创建子元素MultiMedia,DocumentRes.xml路径由数据3决定,并自增数据2写入ID属性;(3)     在上一步MultiMedia节点创建子元素MediaFile;(4)     Content.xml文件ofd:Page/ofd:Content/ofd:Layer路径下创建子元素ImageObject,Content.xml路径由数据4决定,并自增数据2写入ID属性;其中Boundary、CTM由数据7计算得出,需将图片像素先转换为毫米再进行计算,ResourceID为第(2)步的自增ID;(5)     更新Document.xml文件ofd:Document/ofd:CommonData/ofd:MaxUnitID值为数据2;(6)     保存以上所有修改 OFD文件打包打包并删除临时解压文件ZipFile.CreateFromDirectory(解压路径, ofd文件路径);Directory.Delete(解压路径, true); sealopenssllayervisual studio本文转载自:https://www.cnblogs.com/WalkingDead/p/11679072.html
27
2020-10
各种主流软件开源协议解释说明
世界上的开源许可证,大概有上百种。反正笔者是搞不懂他们之间的区别。目前最常见、最流行的六种开源协议:GPL、BSD、MIT、Mozilla、Apache和LGPL,看起来还是很复杂。找到中文说明:http://www.gnu.org/licenses/license-list.html原来看懂开源协议也挺难的,开始怀疑自己的理解能力。图片引用阮一峰的博客:  https://www.ruanyifeng.com/blog/2011/05/how_to_choose_free_software_licenses.html据说此图出自乌克兰程序员Paul Bagwell不花钱,还能拿来赚钱,拿来基本随便用,能闭源-区别在于广告和版权说明一:Apache Licence-随便改,广告也无所谓,版权上有我名字Apache Licence :Apache License, Version 2.0、Apache License, Version 1.1、Apache License, Version 1.0)Apache Licence是著名的非盈利开源组织Apache采用的协议。鼓励代码共享和尊重原作者的著作权,同样允许代码修改,再发布(作为开源或商业软件)二:MIT(MIT)-随便改,不能写我的名字打广告,版权无所谓MIT是和BSD一样宽范的许可协议,作者只想保留版权,而无任何其他了限制.也就是说,你必须在你的发行版里包含原许可协议的声明,无论你是以二进制发布的还是以源代码发布的。三:BSD开源协议(original BSD license、FreeBSD license、Original BSD license)-随便改,什么都无所谓BSD开源协议是一个给于使用者很大自由的协议。基本上使用者可以”为所欲为”,可以自由的使用,修改源代码,也可以将修改后的代码作为开源或者专有软件再发布。不能“免费”拿来赚钱四:MPL(Mozilla Public License)-您的修改归开源软件的发起者,这是奉献精神MPL协议允许免费重发布、免费修改,但要求修改后的代码版权归软件的发起者 。这种授权维护了商业软件的利益,它要求基于这种软件的修改无偿贡献版权给该软件。五:GPL(GNU General Public License)-我开源,你就得开源我们很熟悉的Linux 就是采用了GPL 。GPL 协议和BSD, Apache Licence 等鼓励代码重用的许可很不一样。GPL不允许修改后和衍生的代码做为闭源的商业软件发布和销售。这也就是为什么我们能用免费的各种linux ,包括商业公司的linux 和linux 上各种各样的由个人,组织,以及商业软件公司开发的免费软件了。GPL 协议的主要内容是只要在一个软件中使用(” 使用” 指类库引用,修改后的代码或者衍生代码)GPL 协议的产品,则该软件产品必须也采用GPL 协议,既必须也是开源和免费。这就是所谓的” 传染性”。GPL 协议的产品作为一个单独的产品使用没有任何问题,还可以享受免费的优势。由于GPL 严格要求使用了GPL 类库的软件产品必须使用GPL 协议,对于使用GPL 协议的开源代码,商业软件或者对代码有保密要求的部门就不适合集成/ 采用作为类库和二次开发的基础。六:LGPL(GNU Lesser General Public License)-可以有部分代码不开源,有点赚头LGPL 协议的开源 代码很适合作为第三方类库被商业软件引用LGPL 是GPL 的一个为主要为类库使用设计的开源协议。和GPL 要求任何使用/ 修改/ 衍生之GPL 类库的的软件必须采用GPL 协议不同。LGPL 允许商业软件通过类库引用(link) 方式使用LGPL 类库而不需要开源商业软件的代码。这使得采用LGPL 协议的开源代码可以被商业软件作为类库引用并 发布和销售。但是如果修改LGPL 协议的代码或者衍生,则所有修改的代码,涉及修改部分的额外代码和衍生的代码都必须采用LGPL 协议。因此LGPL 协议的开源 代码很适合作为第三方类库被商业软件引用,但不适合希望以LGPL 协议代码为基础,通过修改和衍生的方式做二次开发的商业软件采用。O2OA 使用的开源协议 AGPL(Affero General Public License)协议说明https://www.gnu.org/licenses/why-affero-gpl.html说人话:1.APGL协议,您可以随意修改、自用,但是不能用来商用。2.APGL协议,您可以自用,但是不能再互联网上搭建服务,提供给网友使用。例如:你不能用o2oa搭建一个多租户平台在互联网上进行用户注册售卖,这样会有法律风险。引用自开源中国购买o2oa商用许可授权后,您相当于得到了一套商业软件的源码和使用权,不受开源协议的限制。
06
2021-08
为什么选择开源
随着越来越多的政府和组织采用类似Linux这样的开源软件,越来越强有力的说明价格并非开源软件的唯一优势。如果真的是价格驱动,每次经济萧条之后,那些被迫采用开源的公司,当然就会转回到昂贵的产权软件上来。但很明显,我们观察到的情况根本不是这样,甚至像微软也开始对某些项目逐步开放代码。免费开源软件(Free and open source software -FOSS)对于商业来说有好多强有力的竞争优势,有些甚至也比低价软件更加有价值。需要举例吗?让我们逐个数过来。 一、开源软件更安全再也想不出比最近Coverity发现安卓核心漏洞这样更好的例子了,Coverity发现了安卓核心的漏洞充分说明了开源软件的安全性是超级可靠的。这个发现为何如此令人振奋呢,正如我们近日注意到的,漏洞之所以能够被发现是因为安卓的核心代码都在公众的视野之中。虽然说安卓不是一个100%的开源程序,但是这个例子还是能够充分的反映著名的Linux之父Linus Torvalds的“Linus法则”:“曝光足够,所有的Bug都是显而易见的。(Given enough eyeballs, all bugs are shallow.)”他的意思是说,只要有足够多的人使用和测试代码,任何缺陷都会被找出来,并被很快解决掉。这和昂贵的商业软件一直所宣称的“不公开更安全”的论调明显是背道而驰的。iPhone和Windows没有听到这样的瑕疵报道难道就意味更加安全了吗?你可能会说,距离安全相去甚远,甚至是截然相反。这意味着这些产品没有对公众开发,公司以外的任何人对许多bugs毫不知情。比如iPhone对蓝牙程序匹配能力超低,经历了几代之后,依然如此。比起FOSS来说,这些公司的内部测试团队永远也不可能拥有全球庞大的社区来测试他们的产品。在像Linux这样的开源世界中,一般来说bug一旦发现,立刻就会被解决;而在商用软件的世界里面恐怕就不是这样。比如微软,在发现zero-day这个缺憾的时候,用了几个月才有布丁发布弥补漏洞。真的要祝福那些使用这些软件的人好运了。事实胜于雄辩,数不清的政府、大学和大型企业了已经选择开源软件作为构建自家数字王国的基石。二、质量就是得到你要的东西一个软件是由几个开发者做出来的,另一个软件由上千个开发者做出来的,哪个会更好?开源软件有数不清的开发者和用户改进安全,创新功能来不断的加强开源软件的可用性,一般来说,开源软件更加接近用户实际所需要的,因为他们自己亲自在改进他。不需要一个销售商去告诉用户他们都需要什么-用户和开发者自己实现他们想要的,而且成就斐然。至少在最近的一次研究中显示,事实上技术上的优越性才是企业客户选择开源的最主要的动因。三、可以定制性:开源让你更任性与产权软件类似的功能,商业客户总是可以找到一个开源的东东,经过一些定制来满足自己的要求。既然代码是开放的,只要修改代码就可以实现他们想要的功能。但根本不要指望去修改产权软件。一个小客户有可能让微软Word团队去修改代码来适应企业的特殊需求吗?你不是在做梦吧?四、自由:不用担心被供应商绑架了商业软件必然把客户绑定在产权上,无法自拔,而开源软件则可以让商业客户从这种折磨中解放出来。商业软件的客户不得不把自己局限于供应商的视野、要求、支配、价格以及时间表中,而且客户还为这些局限买了单。反过来说,FOSS的用户控制自己的决定,想怎样改那个软件都可以。而且他们也有庞大的开发者和用户的社区去寻求帮助。五、灵活性:什么时候怎样更新,你自己说了算如果你的公司是使用微软Office之类的商业软件,你就在一个跑步机上,你不得不永无休止的去更新你的软件和硬件。但开源软件一般来说都不是资源密集型的,那就意味着你甚至可以在有点过时的硬件之上,是你自己而不是你的供应商来决定什么时候更新换代。六、协同性:标准,而不是制造新的标准开源软件比商业软件更加符合开放的标准。如果你觉得与其他公司、电脑或用户的协同性是很重要的,那么你就不要把自己限制在商业数据格式上,开源软件当然更加适合你。七、利于评估对于闭源的软件,你除了供应商告诉你的,他们声称的软件多么的安全和符合标准,除此之外你什么凭据都没有。而对于开源来说,你自己可以看到代码,那是一种亲历的真实。八、更多支持选择:找到你合适你的供应商开源软件一般来说都是免费的,所以一个个生机勃勃的社区总是环绕这每一个软件。几乎每个Linux的版本,你都能在线找到很好的文档、论坛、邮件组、下载区、Wiki、电子报甚至是实时聊天。对于开源CMS来说,无论是对于那些需要有额外保证的公司客户来说,他们更加倾向选择付费的服务,但即便如此,价格仍远远低于商业软件供应商的收费。而且更重要的是开源软件的商业服务公司响应速度更加快,因为支持服务才是他们的收入的主要来源。九、成本真的节约很多除了购买软件的成本以外,商业软件还会产生诸如防病毒、支持、继续升级以及相关的锁定成本等费用,很多成本是你没有意识到的。而开源的呢,当然获得更好的质量,你只要支付商业软件成本的一小部分而已。十、先试后买,不用担心试用期到了如果你想使用开源软件,一般来说在开始的时候,你什么钱都不用花。比如Linux的版本,统统免费,而且有诸多的渠道如LiveCD或Live USBs为你提供安装下载服务。在你不确定之前,你不需要任何委身。
03
2021-03
导致MySQL索引失效的几种常见写法
最近一直忙着处理原来老项目遗留的一些SQL优化问题,由于当初表的设计以及字段设计的问题,随着业务的增长,出现了大量的慢SQL,导致MySQL的CPU资源飙升,基于此,给大家简单分享下这些比较使用的易于学习和使用的经验。这次的话简单说下如何防止你的索引失效。再说之前我先根据我最近的经验说下我对索引的看法,我觉得并不是所以的表都需要去建立索引,对于一些业务数据,可能量比较大了,查询数据已经有了一点压力,那么最简单、快速的办法就是建立合适的索引,但是有些业务可能表里就没多少数据,或者表的使用频率非常不高的情况下是没必要必须要去做索引的。就像我们有些表,2年了可能就10来条数据,有索引和没索引性能方面差不多多少。索引只是我们优化业务的一种方式,千万为了为了建索引而去建索引。下面是我此次测试使用的一张表结构以及一些测试数据CREATE TABLE `user` ( `id` int(5) unsigned NOT NULL AUTO_INCREMENT, `create_time` datetime NOT NULL, `name` varchar(5) NOT NULL, `age` tinyint(2) unsigned zerofill NOT NULL, `sex` char(1) NOT NULL, `mobile` char(12) NOT NULL DEFAULT '', `address` char(120) DEFAULT NULL, `height` varchar(10) DEFAULT NULL, PRIMARY KEY (`id`), KEY `idx_createtime` (`create_time`) USING BTREE, KEY `idx_name_age_sex` (`name`,`sex`,`age`) USING BTREE, KEY `idx_ height` (`height`) USING BTREE, KEY `idx_address` (`address`) USING BTREE, KEY `idx_age` (`age`) USING BTREE ) ENGINE=InnoDB AUTO_INCREMENT=261 DEFAULT CHARSET=utf8;INSERT INTO `bingfeng`.`user`(`id`, `create_time`, `name`, `age`, `sex`, `mobile`, `address`, `height`) VALUES (1, '2019-09-02 10:17:47', '冰峰', 22, '男', '1', '陕西省咸阳市彬县', '175'); INSERT INTO `bingfeng`.`user`(`id`, `create_time`, `name`, `age`, `sex`, `mobile`, `address`, `height`) VALUES (2, '2020-09-02 10:17:47', '松子', 13, '女', '1', NULL, '180'); INSERT INTO `bingfeng`.`user`(`id`, `create_time`, `name`, `age`, `sex`, `mobile`, `address`, `height`) VALUES (3, '2020-09-02 10:17:48', '蚕豆', 20, '女', '1', NULL, '180'); INSERT INTO `bingfeng`.`user`(`id`, `create_time`, `name`, `age`, `sex`, `mobile`, `address`, `height`) VALUES (4, '2020-09-02 10:17:47', '冰峰', 20, '男', '17765010977', '陕西省西安市', '155'); INSERT INTO `bingfeng`.`user`(`id`, `create_time`, `name`, `age`, `sex`, `mobile`, `address`, `height`) VALUES (255, '2020-09-02 10:17:47', '竹笋', 22, '男', '我测试下可以储存几个中文', NULL, '180'); INSERT INTO `bingfeng`.`user`(`id`, `create_time`, `name`, `age`, `sex`, `mobile`, `address`, `height`) VALUES (256, '2020-09-03 10:17:47', '冰峰', 21, '女', '', NULL, '167'); INSERT INTO `bingfeng`.`user`(`id`, `create_time`, `name`, `age`, `sex`, `mobile`, `address`, `height`) VALUES (257, '2020-09-02 10:17:47', '小红', 20, '', '', NULL, '180'); INSERT INTO `bingfeng`.`user`(`id`, `create_time`, `name`, `age`, `sex`, `mobile`, `address`, `height`) VALUES (258, '2020-09-02 10:17:47', '小鹏', 20, '', '', NULL, '188'); INSERT INTO `bingfeng`.`user`(`id`, `create_time`, `name`, `age`, `sex`, `mobile`, `address`, `height`) VALUES (259, '2020-09-02 10:17:47', '张三', 20, '', '', NULL, '180'); INSERT INTO `bingfeng`.`user`(`id`, `create_time`, `name`, `age`, `sex`, `mobile`, `address`, `height`) VALUES (260, '2020-09-02 10:17:47', '李四', 22, '', '', NULL, '165');单个索引1、使用!= 或者 <> 导致索引失效SELECT * FROM `user` WHERE `name` != '冰峰';我们给name字段建立了索引,但是如果!= 或者 <> 这种都会导致索引失效,进行全表扫描,所以如果数据量大的话,谨慎使用可以通过分析SQL看到,type类型是ALL,扫描了10行数据,进行了全表扫描。<>也是同样的结果。2、类型不一致导致的索引失效在说这个之前,一定要说一下设计表字段的时候,千万、一定、必须要保持字段类型的一致性,啥意思?比如user表的id是int自增,到了用户的账户表user_id这个字段,一定、必须也是int类型,千万不要写成varchar、char什么的骚操作。SELECT * FROM `user` WHERE height= 175;这个SQL诸位一定要看清楚,height表字段类型是varchar,但是我查询的时候使用了数字类型,因为这个中间存在一个隐式的类型转换,所以就会导致索引失效,进行全表扫描。现在明白我为啥说设计字段的时候一定要保持类型的一致性了不,如果你不保证一致性,一个int一个varchar,在进行多表联合查询(eg: 1 = '1')必然走不了索引。遇到这样的表,里面有几千万数据,改又不能改,那种痛可能你们暂时还体会。少年们,切记,切记。3、函数导致的索引失效SELECT * FROM `user` WHERE DATE(create_time) = '2020-09-03';如果你的索引字段使用了索引,对不起,他是真的不走索引的。4、运算符导致的索引失效SELECT * FROM `user` WHERE age - 1 = 20;如果你对列进行了(+,-,*,/,!), 那么都将不会走索引。5、OR引起的索引失效SELECT * FROM `user` WHERE `name` = '张三' OR height = '175';OR导致索引是在特定情况下的,并不是所有的OR都是使索引失效,如果OR连接的是同一个字段,那么索引不会失效,反之索引失效。6、模糊搜索导致的索引失效SELECT * FROM `user` WHERE `name` LIKE '%冰';这个我相信大家都明白,模糊搜索如果你前缀也进行模糊搜索,那么不会走索引。7、NOT IN、NOT EXISTS导致索引失效SELECT s.* FROM `user` s WHERE NOT EXISTS (SELECT * FROM `user` u WHERE u.name = s.`name` AND u.`name` = '冰峰')SELECT * FROM `user` WHERE `name` NOT IN ('冰峰');这两种用法,也将使索引失效。但是NOT IN 还是走索引的,千万不要误解为 IN 全部是不走索引的。我之前就有误解(丢人了...)。8、IS NULL不走索引,IS NOT NULL走索引SELECT * FROM `user` WHERE address IS NULL不走索引。SELECT * FROM `user` WHERE address IS NOT NULL;走索引。根据这个情况,建议大家这设计字段的时候,如果没有必要的要求必须为NULL,那么最好给个默认值空字符串,这可以解决很多后续的麻烦(有深刻的体验<体验=教训>)。复合索引1、最左匹配原则EXPLAIN SELECT * FROM `user` WHERE sex = '男';EXPLAIN SELECT * FROM `user` WHERE name = '冰峰' AND sex = '男';测试之前,删除其他的单列索引。啥叫最左匹配原则,就是对于符合索引来说,它的一个索引的顺序是从左往右依次进行比较的,像第二个查询语句,name走索引,接下来回去找age,结果条件中没有age那么后面的sex也将不走索引。注意:SELECT * FROM `user` WHERE sex = '男' AND age = 22 AND `name` = '冰峰';可能有些搬砖工可能跟我最开始有个误解,我们的索引顺序明明是name、sex、age,你现在的查询顺序是sex、age、name,这肯定不走索引啊,你要是自己没测试过,也有这种不成熟的想法,那跟我一样还是太年轻了,它其实跟顺序是没有任何关系的,因为mysql的底层会帮我们做一个优化,它会把你的SQL优化为它认为一个效率最高的样子进行执行。所以千万不要有这种误解。2、如果使用了!=会导致后面的索引全部失效SELECT * FROM `user` WHERE sex = '男' AND `name` != '冰峰' AND age = 22;我们在name字段使用了 != ,由于name字段是最左边的一个字段,根据最左匹配原则,如果name不走索引,后面的字段也将不走索引。关于符合索引导致索引失效的情况能说的目前就这两种,其实我觉得对于符合索引来说,重要的是如何建立高效的索引,千万不能说我用到那个字段我就去建立一个单独的索引,不是就可以全局用了嘛。这样是可以,但是这样并没有符合索引高效,所以为了成为高级的搬砖工,我们还是要继续学习,如何创建高效的索引。
23
2020-09
视频学习
全部|产品宣传|功能介绍|开发教程
论坛热帖
1
2
开发者社区