谣言
互联网上有传言说我们应该避免在单个 MySQL 表中有超过 2000 万行。否则,表的性能会下降,当它超过软限制时,你会发现 SQL 查询比平时慢得多 。这些判断是在多年前使用HDD硬盘存储时做出的。我想知道在2023年对于基于SSD的MySQL数据库来说,这是否仍然成立,如果成立,原因是什么?
环境
· 数据库 MySQL 版本:8.0.25 实例类型:AWS db.r5.large (2vCPUs, 16GiB RAM) EBS 存储类型:通用 SSD (gp2)· 测试客户端 Linux 内核版本:6.1 实例类型:AWS t2.micro (1 vCPU,1GiB 内存)
实验设计
创建具有相同模式但大小不同的表。我创建了9个表,分别包含10万、20万、50万、100万、200万、500万、1000万、2000万、3000万、5000万和6000万行。
1.创建几个具有相同模式的表:
CREATE TABLE row_test(
`id` int NOT NULL AUTO_INCREMENT,
`person_id` int NOT NULL,
`person_name` VARCHAR(200),
`insert_time` int,
`update_time` int,
PRIMARY KEY (`id`),
KEY `query_by_update_time` (`update_time`),
KEY `query_by_insert_time` (`insert_time`)
);
2. 插入不同行的表格。我使用测试客户端和复制来创建这些表。脚本可以在这里找到。
# test client
INSERT INTO {table} (person_id, person_name, insert_time, update_time) VALUES ({person_id}, {person_name}, {insert_time}, {update_time})
# copy
create table like
insert into (`person_id`, `person_name`, `insert_time`, `update_time`)
select `person_id`, `person_name`, `insert_time`, `update_time` from
person_id、person_name、insert_time 和 update_time 的值是随机的。
3.使用测试客户端执行以下sql查询来测试性能。脚本可以在这里找到。
select count(*) from -- full table scan
select count(*) from where id = 12345 -- query by primary key
select count(*) from where insert_time = 12345 -- query by index
select * from where insert_time = 12345 -- query by index, but cause 2-times index tree lookup
4.查看innodb缓冲池状态
SHOW ENGINE INNODB STATUS
SHOW STATUS LIKE 'innodb_buffer_pool_page%'
5.每次在表上测试完一定要重启数据库!刷新 innodb 缓冲池以避免读取旧缓存并得到错误结果!
结果
查询 1:select count(*) from
这种查询会造成全表扫描,这是MySQL不擅长的。
No-cache round:(第一轮)当缓冲池中没有缓存数据时,第一次执行查询。 Cache round:(Other round)当缓冲池中已经有数据缓存时执行查询,通常在第一次执行之后。
几个观察:
1.第一次执行的查询运行时间比后面的要长
原因是MySQL使用了innodb_buffer_pool来缓存数据页。在第一次执行之前,缓冲池是空的,它必须进行大量的磁盘 I/O 才能从 .idb 文件加载表。但第一次执行后,数据存储在缓冲池中,后续执行可以通过内存计算得到结果,避免磁盘I/O,速度更快。该过程称为MySQL 缓冲池预热。
2.select count(*) from 将尝试将整个表加载到缓冲池
我比较了实验前后的 innodb_buffer_pool 统计数据。运行查询后,如果缓冲池足够大,缓冲池使用变化等于表大小。否则只有部分表会缓存在缓冲池中。原因是查询select count(*) from table
会做全表扫描,一行一行地统计行数。如果没有缓存,这需要将完整表加载到内存中。为什么?因为 Innodb 支持事务,它不能保证事务在不同时间看到同一张表。全表扫描是获得准确行数的唯一安全方法。
3.如果缓冲池不能容纳全表,查询延迟会爆发
我注意到 innodb_buffer_pool 大小会对查询性能产生很大影响,因此我尝试在不同的配置下运行查询。当使用 11G 的缓冲池时,查询延迟的突增发生在表大小达到 50M 时。然后将缓冲池大小减小为 7G,查询延迟的突增发生在表大小为 30M 时。最后将缓冲池大小减小到 3G,查询运行时间的突增发生在表大小为 20M 时。很明显,如果表中的数据无法被缓存到缓冲池中,执行select count(*) from 就需要进行昂贵的磁盘 I/O 操作来加载数据,从而导致查询运行时间的突增。
4. 在不缓存的情况下,查询运行时间与表大小呈线性关系,与缓冲池大小无关。
无缓存循环运行时间由磁盘 I/O 决定,与缓冲池大小无关。select count(*)
使用相同 IOPS 的存储磁盘预热缓冲池没有区别。
5. 如果表无法完全缓存在缓冲池中,那么无缓存轮和有缓存轮之间的查询运行时间差是恒定的。
同时注意到,尽管如果表无法完全缓存在缓冲池中会导致查询运行时间的突增,但运行时间是可预测的。无缓存轮运行时间和有缓存轮运行时间之间的差值是恒定的,无论表的大小如何。原因是表的部分数据被缓存在缓冲池中,这个差值表示了从缓冲池而不是磁盘进行查询所节省的时间。
查询 2、3:select count(*) from where = 12345
此查询使用索引。由于不是范围查询,只需要在B+树的路径中从上到下查找页面,并将这些页面缓存到innodb缓冲池中即可。
我创建的表的 B+ 树的深度都是 3,导致 3-4 次 I/O 来预热缓冲区,平均耗时 4-6ms。之后,如果我再次运行相同的查询,它会直接从内存中查找结果,即 0.5ms,等于网络 RTT。如果缓存页面长时间未命中并从缓冲池中逐出,则必须再次从磁盘加载该页面,这最多需要 4 次磁盘 I/O。
查询 4:select * from where = 12345
此查询导致 2 次索引查找。由于select *
需要查询获取不包含在索引中的person_name
, person_id
,因此在查询执行期间数据库引擎必须查找 2 个 B+ 树。它首先查找insert_time
B+ 树以获取目标行的主键,然后查找主键 B+ 树以获取该行的完整数据,如下图所示:
这就是我们在生产中应该避免的原因select *
。并且在实验中,数据证实此查询加载的页面块比查询 2 或 3 多 2 倍,最多为 8。平均查询运行时间为 6-10 毫秒,也是查询 2 或 3 的 1.5 到 2 倍。
谣言是怎么来的
首先我们需要知道innodb索引页的物理结构。默认页面大小为 16k,由页眉、系统记录、用户记录、页面导向器和尾部组成。将只剩下 15-14k 来存储免费数据。
假设您使用 INT 作为主键(4 字节),每行 1KB 的有效负载。每个叶页可以存储 15 行,它将是 4+8=12 字节,使其成为指向该页的指针。因此,每个非叶页最多可以容纳 15k / 12 字节 = 1280 个指针。如果你有一个 4 层的 B+ 树,它最多可以容纳 1280*1280*15 = 24.6M 行数据。
回到 HDD 占据市场主导地位且 SSD 对于数据库而言过于昂贵的时代,4 次随机 I/O 可能是我们可以容忍的最坏情况,而使用 2 次索引树查找的查询甚至会使情况变得更糟。当时的工程师想要控制索引树的深度,不希望它们长得太深。现在SSD越来越流行,随机I/O比以前便宜了,我们可以回顾一下10年前的规则。
顺便说一句,5层B+树可以容纳1280*1280*1280*15 = 31.4B行数据,超过了INT所能容纳的最大数量。对每行大小的不同假设将导致不同的软限制,小于或大于 20M。例如,在我的实验中,每行大约 816 字节(我使用utf8mb4
字符集,所以每个字符占用 4 个字节),4 层 B+ 树可以容纳的软限制是 29.5M。
结论
Innodb_buffer_pool 大小/表大小决定是否会出现性能下降。
一个更有意义的指标来判断是否需要拆分MySQL表是 查询运行时间与缓冲池命中率的比值 。 如果查询总是命中缓冲池,就不会有性能问题。2000万行只是基于经验的一个值。
除了拆表,增加InnoDB缓冲池大小或数据库内存也是一个选择。
在生产环境中,如果可能的话,尽量避免使用select *
,因为在最坏的情况下会导致索引树的两次查找。
(个人观点)考虑到SSD现在的普及,2000万行并不是MySQL表的一个非常有效的软限制。
来源:Yisheng's blog
更多技术干货请关注公号“云原生数据库 ”
squids.cn,基于公有云基础资源,提供云上 RDS,云备份,云迁移,SQL 窗口门户企业功能,
帮助企业快速构建云上数据库融合生态。
你可能感兴趣的:(mysql,数据库,sql,性能优化,开发语言)
入门到精通,掌握这些SQL语句让你成功玩转数据库!
小码哥说测试
软件测试 技术分享 自动化测试 数据库 sql jmeter 单元测试 测试工具 自动化测试 软件测试
1.在SQL中,如何创建一个数据库?CREATEDATABASEdatabase_name;2.如何删除一个数据库?DROPDATABASEdatabase_name;3.如何创建一个新的数据表?CREATETABLEtable_name(column1datatype,column2datatype,column3datatype,.....);4.如何修改一个数据表的列名?ALTERTABLE
Centos Stream 9 搭建 Mongo 7.0.12 副本集分片集群
Loyu來了哦
linux MongoDB centos linux 运维 mongodb
系统:centosstream9mongo版本:7.0.12MongoDB是一种流行的NoSQL数据库,具有高可扩展性和灵活的数据模型。在分片环境中,MongoDB由以下几个主要组件组成:mongos:这是路由服务,客户端应用程序通过mongos连接到分片集群。mongos负责将查询分配到适当的分片。configservers:配置服务器存储了集群的元数据,包括分片的分片键和路由信息。最初的Mon
MySQL错误 Host is blocked because of many connection errors; unblock with ‘mysqladmin flush-hosts‘问题解决
RayCheungQT
mysql
错误:Hostisblockedbecauseofmanyconnectionerrors;unblockwith‘mysqladminflush-hosts’简述mysql连接流程:根据mysql连接协议,发起握手,在网络层面里mysql服务器在内存上常见客户端连接的数据结构连接认证,检查用户名,密码正确不监听端口,等待命令原因:同一个ip在短时间内产生太多(超过mysql数据库max_conn
Elasticsearch
2301_78085386
elasticsearch 大数据 搜索引擎
ElasticsearchES概述Elasticsearch,简称为ES,是一款非常强大的开源的高扩展的分布式全文检索引擎,可以帮助我们从海量数据中快速找到需要的内容,它可以近乎实时的存储、检索数据.还可以可以实现日志统计、分析、系统监控等功能.官网:https://www.elastic.co/cn例如京东,淘宝,头条等站内搜索功能mysql搜索匹配机制性能低,数量大的情况下影响性能采用正向索引
SpringBoot JPA
Puny丶微芒
定义JPA是JavaPersistenceAPI的简称,中文名Java持久层API,是JDK5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中。JPA的总体思想和现有Hibernate、TopLink、JDO等ORM框架大体一致。总的来说,JPA包括以下3方面的技术:1.ORM映射元数据JPA支持XML和JDK注解两种元数据的形式,元数据描述对象和表之间的映射关系,
Oracle 数据库新手指南(一) Oracle基础
luo_lio
Oracle 数据库 oracle 开发语言
专栏目的本专栏旨在为读者提供一个全面了解Oracle数据库的平台。通过一系列的文章,我们将探索Oracle数据库的关键特性和最佳实践,帮助您掌握Oracle数据库的核心技术,并解决日常管理中遇到的问题。具体而言,本专栏的目标包括:深入理解Oracle的核心特性:解释Oracle数据库的核心组件和架构,以及如何利用这些特性来提高性能和可靠性。实战经验分享:提供实际案例分析,展示如何在真实环境中应用O
数据库系统概论:数据库完整性
ZachOn1y
数据库 数据库 oracle 后端 数据库系统 mysql
引言数据库是现代信息系统的心脏,数据的准确性和一致性对于业务流程至关重要。数据库完整性是确保数据质量的基石,它涵盖了数据的正确性、相容性和一致性,是数据安全与业务连续性的保障。数据库完整性是指数据的精确性、可靠性和逻辑一致性,它防止数据库中出现不符合语义的数据。其目的是保护数据免受意外或恶意破坏,确保数据在逻辑上的一致性、正确性和有效性。数据库完整性基本概念数据库的完整性(integrity)是指
C#进阶——各种方法特性
Echo_Lee0
C# c#
静态方法特点:1、生命周期一旦创建–应用结束才会结束2、全局3、效率高用处:用户登录信息、系统配置信息、系统设置、SQLHelper注意:静态的东西创建多了占用内存会很大,不是必要的情况不要创建静态的对象调用:静态方法中调用非静态方法时,不可以直接调用,需要把所在类初始化以后再调用Form1form1=newForm1();form1.Test();构造方法用处:初始化对象或者初始化一些数据特点:
深入理解数据库:从基础到高级应用
魏时还
数据库
引言在当今这个数据洪流汹涌的时代,数据库技术已蜕变成为企业数字化转型与智能决策不可或缺的基石。它不再仅仅是数据的简单堆砌之地,而是驱动业务洞察、支撑复杂分析、加速创新决策的强大引擎。从金融、医疗到零售、科技,各行各业都在借助数据库技术挖掘数据价值,推动行业进步。本文将引领您踏上一场深入数据库世界的探索之旅。从基础概念的扎实构建,到架构设计的精妙布局,再到性能优化的极致追求,我们将一一揭开数据库技术
Django模板语法和ModelForm
Q_M_Y_Y
django django python
ModelForm或者Form组件的作用:生成HTML标签对POST过来的表单数据进行验证直接将数据保存到数据库获取表单错误信息Django的管道操作模板时间格式化显示{{item.event_start|date:“Y-m-dH:i:s”}}{{bio|truncatewords:“30”}}{{my_list|first|upper}}{{name|lower}}Mysql时间转Python时
Clickhouse篇之数据的备份与恢复
听说唐僧不吃肉
Clickhouse clickhouse 数据库
Clickhouse数据的备份与恢复要备份ClickHouse数据库中的数据表,你可以使用ClickHouse提供的BACKUP和RESTORE功能,或者通过手动备份文件系统中的数据目录来实现。以下是两种常用的方法:方法一:使用BACKUP和RESTORE功能从ClickHouse21.8版本开始,支持BACKUP和RESTORE命令。以下是备份和恢复的步骤:1.备份数据库备份整个数据库BACKU
网络安全售前入门07安全服务——主机漏洞扫描服务方案
努力工作的网安人
网络安全 安全 经验分享 网络安全
目录1.服务概述2.服务内容3.服务输出1.服务概述漏洞扫描服务主要针对系统层、网络层、数据层、应用层进行安全评估,即对客户使用系统的运行环境进行安全评估。2.服务内容本项目针对客户方系统主机、网络设备、数据库系统及云平台和虚拟化平台等,具体如下:类型具体对象扫描内容操作系统Windows操作系统包括但不限于:windowsxp/2000/2003/2008,包括32位和64位。Linux/Uni
网络安全售前入门08安全服务——Web漏洞扫描服务
努力工作的网安人
安全服务 安全 web安全 前端 网络安全 经验分享
目录1.服务概述2.服务内容2.1代码层安全2.2应用层安全3.服务工具4.服务输出1.服务概述Web漏洞扫描服务主要针对应用系统漏洞进行扫描,主要包括扫描WEB服务器(IIS、Websphere、Weblogic、Apache等)的漏洞;识别数据库类型;扫描第三方组件的漏洞;检测常见的WEB应用弱点,支持OWASPTOP10等主流安全漏洞。2.服务内容2.1代码层安全应用程序及代码在开发过程中,
HQL || SQL练习:根据四节气推算季节
天寒白
sql 数据库 大数据 hive
有一张用户骑车日期节气表dwd_ride_date_term_dd,包含user_id(用户id)、ride_dt(骑行日期)以及dt_term(日期对应节气)如果用户当天多次骑行,该表只会记录一次如果骑行日不是立春、立夏、立秋、立冬这四个日期,那么该字段为NULL问题:请求出所有用户骑行日对应的季节(春、夏、秋、冬)思路:很明显,我们只要计算出立春、立夏、立秋、立冬四个节气的具体日期(开始日期和
用友U8 Cloud RepAddToTaskAction SQL注入漏洞复现
天官赐福万无禁忌
漏洞复现 安全 web安全
1产品简介用友U8Cloud是用友推出的新一代云ERP,主要聚焦成长型、创新型企业,提供企业级云ERP整体解决方案。2漏洞概述用友U8CloudRepAddToTaskAction接口处存在SQL注入漏洞,未经身份验证的远程攻击者除了可以利用SQL注入漏洞获取数据库中的信息(例如,管理员后台密码、站点的用户个人信息)之外,甚至在高权限的情况可向服务器中写入木马,进一步获取服务器系统权限。3影响范围
python sql语句生成_python自动生成sql语句的脚本
weixin_39531183
python sql语句生成
描述:工作中在数据库中创建表时,当字段很多时,比较麻烦,开发一个工具,可在excel中写好字段英文名和中文名,然后通过py生成脚本或直接在库中生成表脚本:importtkinterfromtkinterimport*importtkinter.messageboxfromtkinterimportscrolledtextimportxlrdimportpymysqlimportos#从excel中
python数据库操作批量sql执行_利用Python脚本批量生成SQL语句
weixin_39725154
通过Python脚本批量生成插入数据的SQL语句原始SQL语句:INSERTINTOsystem_user(id,login_name,name,password,salt,code,createtime,email,main_org,positions,status,used,url,invalid,millis,id_card,phone_no,past,end_date,start_date
推荐一篇 学习SQL 的文章
@Carey
java零基础开始 sql 数据库
学习java,当然避不开数据库的知识,个人认为好学好理解的一篇文章,推荐给大家SQL语法基础知识总结|JavaGuide「Java学习+面试指南」一份涵盖大部分Java程序员所需要掌握的核心知识。准备Java面试,首选JavaGuide!https://javaguide.cn/database/sql/sql-syntax-summary.html#sql-%E8%AF%AD%E6%B3%95希
什么是hql以及hql和sql的区别
m0_48680499
一、hql的定义Hibernate查询语言(HQL)是一种面向对象的查询语言,类似于SQL,但不是去对表和列进行操作,而是面向对象和它们的属性。二、HQL1.HQL里面的类名和属性名区分大小写,但关键字不区分大小写2.?从下标0开始计算位置3.HQL支持:命名参数4.HQL是面向对象的查询语言三、SQL1.SQL里面的表名和列名不区分大小写2.?从顺序1开始计算位置3.SQL不支持:命名参数4.S
事务代码中加synchronized锁引发的bug
在下uptown
bug 数据库
背景最近解决了个BUG,由于历史背景,在某一个产品里的用户中心有两套系统,两套系统还使用了两个不同的数据库,所以创建用户的时候会有一个新数据库到旧数据库同步的操作。具体的流程是用户在页面注册了新用户,请求被新用户中心系统a处理,然后通过消息组件同步到用户中心系统b中,用户只要修改了用户的信息不论是手机号、年龄、姓名等等都会异步触发同步机制,一切听起来都很不合理中透露着合理。BUG从现象上看是出现了
sqlsugar 不映射字段,sqlsugar 忽略字段。sqlsugar 字段改名。
djk8888
数据库
sqlsugar不映射字段,sqlsugar忽略字段。利用特性SugarColumn,将IsIgnore设置为True即可![SugarColumn(IsIgnore=true)]//sqlsugar忽略字段publicdecimalMaxTemp{get;set;}这样Sqlsugar增删改查数据库的时候自动跳过该字段,但是操作实体的时候依然可以访问到该字段,进行赋值或取值。在SqlSugar中
SQL 注入新视角:堆查询、JSON 与头部 XFF 注入剖析及防范
白袍无涯
sql 安全 web安全 网络安全 计算机网络 安全架构 系统安全
在SQL注入攻击的世界中,除了一些常见的注入方式外,还有堆查询注入、JSON注入以及头部XFF注入等较为特殊的攻击手段。这些攻击方式利用不同的场景和漏洞,对数据库安全构成严重威胁。本文将详细介绍这三种SQL注入攻击方式的原理和特点。一、堆查询注入1.原理堆查询注入是一种利用数据库中可以同时执行多个查询的特性进行攻击的方法。在某些数据库系统中,可以通过分号将多个查询语句连接起来执行。攻击者利用这个特
HQL || SQL :连续签到领金币
天寒白
HQL SQL练习 数据库 前端 sql 数据仓库
已知一张用户行为日志表tb_user_log,字段包括uid-用户ID、artical_id-文章ID、in_time-进入时间、out_time-离开时间、sign_in-是否签到注意1:只有artical_id为0时sign_in值才有效;注意2:从2021年7月7日0点开始,用户每天签到可以领1金币,并可以开始累积签到天数,连续签到的第3、7天分别可额外领2、6金币,每连续签到7天后重新累积
python批量生成sql用于创建500个用户
weixin_43946945
python sql 数据库
创建500个用户,分别为jmeter001-jmeter500,密码都是123,手动添加不现实,用客户端复制粘贴表数据也要添加很久,因此想批量生成500条插入的sql,如下:start_num=1end_num=500insert_sql="INSERTINTO`sys_user`(`user_id`,`username`,`password`,`email`,`mobile`,`create_t
第七十一章 SQL命令 SELECT(三)
Cache技术分享
第七十一章SQL命令SELECT(三)列别名指定SELECT-ITEM时,可以使用AS关键字指定列名的别名:SELECTNameASPersonName,DOBASBirthDate,...列别名在结果集中显示为列标题。指定列别名是可选的;始终提供默认值。列别名以指定的字母大小写显示;但是,当在ORDERBY子句中引用时,它不区分大小写。C别名必须是有效的标识符。C别名可以是分隔的标识符。使用带分
用友U8-CRM exportdictionary.php SQL注入
iSee857
漏洞复现 安全
0x01漏洞描述:用友U8-CRM的/devtools/tools/exportdictionary.php接口处存在SQL注入漏洞。这可能导致泄露敏感数据、破坏数据库完整性,甚至获取对数据库的完全控制。0x02影响版本:V16.1,V16.0,V15.1,V15.0,V130x03搜索语句:Fofa:title="用友U8CRM"0x04漏洞复现:GET/devtools/tools/expor
hivesql 练习3
小涛手记
hive hive sql 大数据
--源表name,subjectid,age,score张三,0001,22,45张三,0002,22,56李四,0002,18,88赵五,0002,24,66--目标表(科目0001没有成绩的学生name和age)name,age李四,18赵五,24createtablescore_t(namestring,subjectidstring,agestring,scorestring)ROWFOR
hivesql练习
小涛手记
hive hive sql
源表:province,province_id,city,city_id,area,area_id甘肃省,11,张掖市,21,甘州区,31甘肃省,11,张掖市,21,山丹县,32甘肃省,11,张掖市,21,高台县,33甘肃省,11,兰州市,22,七里河,34甘肃省,11,兰州市,22,新区,35北京,12,北京,12,海淀区,36北京,12,北京,12,昌平区,37目标表:+------+----
Hive SQL练习之影评案例
软件手
Hive mysql hive hadoop sql 大数据
找的练习hive,内容非原创链接https://www.cnblogs.com/frankdeng/p/9309668.html一、建表,导入数据1、建表[root@masterhadoop]#hiveLogginginitializedusingconfigurationinjar:file:/usr/local/src/apache-hive-1.2.2-bin/lib/hive-common
python编写API接口实现数据筛选、查询与分页
唯余木叶下弦声
python 开发语言
目录一、背景二、代码一、背景由于系统上需要分页展示数据,并提供按字段筛选数据的功能,于是需要我写个接口,以供前端使用。接口可以通过pythonflask框架实现。Flask是一个轻量级的Web框架,它提供了足够的灵活性来构建定制的RESTfulAPI。开发者可以根据需求轻松地设计和实现接口。数据的查询可以通过pymysql连接MySQL数据库实现。数据的筛选和分页可以通过堆叠where条件、row
scala的option和some
矮蛋蛋
编程 scala
原文地址:
http://blog.sina.com.cn/s/blog_68af3f090100qkt8.html
对于学习 Scala 的 Java™ 开发人员来说,对象是一个比较自然、简单的入口点。在 本系列 前几期文章中,我介绍了 Scala 中一些面向对象的编程方法,这些方法实际上与 Java 编程的区别不是很大。我还向您展示了 Scala 如何重新应用传统的面向对象概念,找到其缺点
NullPointerException
Cb123456
android BaseAdapter
java.lang.NullPointerException: Attempt to invoke virtual method 'int android.view.View.getImportantForAccessibility()' on a null object reference
出现以上异常.然后就在baidu上
PHP使用文件和目录
天子之骄
php文件和目录 读取和写入 php验证文件 php锁定文件
PHP使用文件和目录
1.使用include()包含文件
(1):使用include()从一个被包含文档返回一个值
(2):在控制结构中使用include()
include_once()函数需要一个包含文件的路径,此外,第一次调用它的情况和include()一样,如果在脚本执行中再次对同一个文件调用,那么这个文件不会再次包含。
在php.ini文件中设置
SQL SELECT DISTINCT 语句
何必如此
sql
SELECT DISTINCT 语句用于返回唯一不同的值。
SQL SELECT DISTINCT 语句
在表中,一个列可能会包含多个重复值,有时您也许希望仅仅列出不同(distinct)的值。
DISTINCT 关键词用于返回唯一不同的值。
SQL SELECT DISTINCT 语法
SELECT DISTINCT column_name,column_name
F
java冒泡排序
3213213333332132
java 冒泡排序
package com.algorithm;
/**
* @Description 冒泡
* @author FuJianyong
* 2015-1-22上午09:58:39
*/
public class MaoPao {
public static void main(String[] args) {
int[] mao = {17,50,26,18,9,10
struts2.18 +json,struts2-json-plugin-2.1.8.1.jar配置及问题!
7454103
DAO spring Ajax json qq
struts2.18 出来有段时间了! (貌似是 稳定版)
闲时研究下下! 貌似 sruts2 搭配 json 做 ajax 很吃香!
实践了下下! 不当之处请绕过! 呵呵
网上一大堆 struts2+json 不过大多的json 插件 都是 jsonplugin.34.jar
strut
struts2 数据标签说明
darkranger
jsp bean struts servlet Scheme
数据标签主要用于提供各种数据访问相关的功能,包括显示一个Action里的属性,以及生成国际化输出等功能
数据标签主要包括:
action :该标签用于在JSP页面中直接调用一个Action,通过指定executeResult参数,还可将该Action的处理结果包含到本页面来。
bean :该标签用于创建一个javabean实例。如果指定了id属性,则可以将创建的javabean实例放入Sta
链表.简单的链表节点构建
aijuans
编程技巧
/*编程环境WIN-TC*/ #include "stdio.h" #include "conio.h"
#define NODE(name, key_word, help) \ Node name[1]={{NULL, NULL, NULL, key_word, help}}
typedef struct node { &nbs
tomcat下jndi的三种配置方式
avords
tomcat
jndi(Java Naming and Directory Interface,Java命名和目录接口)是一组在Java应用中访问命名和目录服务的API。命名服务将名称和对象联系起来,使得我们可以用名称
访问对象。目录服务是一种命名服务,在这种服务里,对象不但有名称,还有属性。
tomcat配置
关于敏捷的一些想法
houxinyou
敏捷
从网上看到这样一句话:“敏捷开发的最重要目标就是:满足用户多变的需求,说白了就是最大程度的让客户满意。”
感觉表达的不太清楚。
感觉容易被人误解的地方主要在“用户多变的需求”上。
第一种多变,实际上就是没有从根本上了解了用户的需求。用户的需求实际是稳定的,只是比较多,也比较混乱,用户一般只能了解自己的那一小部分,所以没有用户能清楚的表达出整体需求。而由于各种条件的,用户表达自己那一部分时也有
富养还是穷养,决定孩子的一生
bijian1013
教育 人生
是什么决定孩子未来物质能否丰盛?为什么说寒门很难出贵子,三代才能出贵族?真的是父母必须有钱,才能大概率保证孩子未来富有吗?-----作者:@李雪爱与自由
事实并非由物质决定,而是由心灵决定。一朋友富有而且修养气质很好,兄弟姐妹也都如此。她的童年时代,物质上大家都很贫乏,但妈妈总是保持生活中的美感,时不时给孩子们带回一些美好小玩意,从来不对孩子传递生活艰辛、金钱来之不易、要懂得珍惜
oracle 日期时间格式转化
征客丶
oracle
oracle 系统时间有 SYSDATE 与 SYSTIMESTAMP;
SYSDATE:不支持毫秒,取的是系统时间;
SYSTIMESTAMP:支持毫秒,日期,时间是给时区转换的,秒和毫秒是取的系统的。
日期转字符窜:
一、不取毫秒:
TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS')
简要说明,
YYYY 年
MM 月
【Scala六】分析Spark源代码总结的Scala语法四
bit1129
scala
1. apply语法
FileShuffleBlockManager中定义的类ShuffleFileGroup,定义:
private class ShuffleFileGroup(val shuffleId: Int, val fileId: Int, val files: Array[File]) {
...
def apply(bucketId
Erlang中有意思的bug
bookjovi
erlang
代码中常有一些很搞笑的bug,如下面的一行代码被调用两次(Erlang beam)
commit f667e4a47b07b07ed035073b94d699ff5fe0ba9b
Author: Jovi Zhang <
[email protected] >
Date: Fri Dec 2 16:19:22 2011 +0100
erts:
移位打印10进制数转16进制-2008-08-18
ljy325
java 基础
/**
* Description 移位打印10进制的16进制形式
* Creation Date 15-08-2008 9:00
* @author 卢俊宇
* @version 1.0
*
*/
public class PrintHex {
// 备选字符
static final char di
读《研磨设计模式》-代码笔记-组合模式
bylijinnan
java 设计模式
声明: 本文只为方便我个人查阅和理解,详细的分析以及源代码请移步 原作者的博客http://chjavach.iteye.com/
import java.util.ArrayList;
import java.util.List;
abstract class Component {
public abstract void printStruct(Str
利用cmd命令将.class文件打包成jar
chenyu19891124
cmd jar
cmd命令打jar是如下实现:
在运行里输入cmd,利用cmd命令进入到本地的工作盘符。(如我的是D盘下的文件有此路径 D:\workspace\prpall\WEB-INF\classes)
现在是想把D:\workspace\prpall\WEB-INF\classes路径下所有的文件打包成prpall.jar。然后继续如下操作:
cd D: 回车
cd workspace/prpal
[原创]JWFD v0.96 工作流系统二次开发包 for Eclipse 简要说明
comsci
eclipse 设计模式 算法 工作 swing
JWFD v0.96 工作流系统二次开发包 for Eclipse 简要说明
&nb
SecureCRT右键粘贴的设置
daizj
secureCRT 右键 粘贴
一般都习惯鼠标右键自动粘贴的功能,对于SecureCRT6.7.5 ,这个功能也已经是默认配置了。
老版本的SecureCRT其实也有这个功能,只是不是默认设置,很多人不知道罢了。
菜单:
Options->Global Options ...->Terminal
右边有个Mouse的选项块。
Copy on Select
Paste on Right/Middle
Linux 软链接和硬链接
dongwei_6688
linux
1.Linux链接概念Linux链接分两种,一种被称为硬链接(Hard Link),另一种被称为符号链接(Symbolic Link)。默认情况下,ln命令产生硬链接。
【硬连接】硬连接指通过索引节点来进行连接。在Linux的文件系统中,保存在磁盘分区中的文件不管是什么类型都给它分配一个编号,称为索引节点号(Inode Index)。在Linux中,多个文件名指向同一索引节点是存在的。一般这种连
DIV底部自适应
dcj3sjt126com
JavaScript
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml&q
Centos6.5使用yum安装mysql——快速上手必备
dcj3sjt126com
mysql
第1步、yum安装mysql
[root@stonex ~]# yum -y install mysql-server
安装结果:
Installed:
mysql-server.x86_64 0:5.1.73-3.el6_5 &nb
如何调试JDK源码
frank1234
jdk
相信各位小伙伴们跟我一样,想通过JDK源码来学习Java,比如collections包,java.util.concurrent包。
可惜的是sun提供的jdk并不能查看运行中的局部变量,需要重新编译一下rt.jar。
下面是编译jdk的具体步骤:
1.把C:\java\jdk1.6.0_26\sr
Maximal Rectangle
hcx2013
max
Given a 2D binary matrix filled with 0's and 1's, find the largest rectangle containing all ones and return its area.
public class Solution {
public int maximalRectangle(char[][] matrix)
Spring MVC测试框架详解——服务端测试
jinnianshilongnian
spring mvc test
随着RESTful Web Service的流行,测试对外的Service是否满足期望也变的必要的。从Spring 3.2开始Spring了Spring Web测试框架,如果版本低于3.2,请使用spring-test-mvc项目(合并到spring3.2中了)。
Spring MVC测试框架提供了对服务器端和客户端(基于RestTemplate的客户端)提供了支持。
&nbs
Linux64位操作系统(CentOS6.6)上如何编译hadoop2.4.0
liyong0802
hadoop
一、准备编译软件
1.在官网下载jdk1.7、maven3.2.1、ant1.9.4,解压设置好环境变量就可以用。
环境变量设置如下:
(1)执行vim /etc/profile
(2)在文件尾部加入:
export JAVA_HOME=/home/spark/jdk1.7
export MAVEN_HOME=/ho
StatusBar 字体白色
pangyulei
status
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
/*you'll also need to set UIViewControllerBasedStatusBarAppearance to NO in the plist file if you use this method
如何分析Java虚拟机死锁
sesame
java thread oracle 虚拟机 jdbc
英文资料:
Thread Dump and Concurrency Locks
Thread dumps are very useful for diagnosing synchronization related problems such as deadlocks on object monitors. Ctrl-\ on Solaris/Linux or Ctrl-B
位运算简介及实用技巧(一):基础篇
tw_wangzhengquan
位运算
http://www.matrix67.com/blog/archives/263
去年年底写的关于位运算的日志是这个Blog里少数大受欢迎的文章之一,很多人都希望我能不断完善那篇文章。后来我看到了不少其它的资料,学习到了更多关于位运算的知识,有了重新整理位运算技巧的想法。从今天起我就开始写这一系列位运算讲解文章,与其说是原来那篇文章的follow-up,不如说是一个r
jsearch的索引文件结构
yangshangchuan
搜索引擎 jsearch 全文检索 信息检索 word分词
jsearch是一个高性能的全文检索工具包,基于倒排索引,基于java8,类似于lucene,但更轻量级。
jsearch的索引文件结构定义如下:
1、一个词的索引由=分割的三部分组成: 第一部分是词 第二部分是这个词在多少