使用“垂直分割”技术(见下一条),你可以分割你的表成为两个一个是定长的,一个则是不定长的。
16. 垂直分割
“垂直分割”是一种把数据库中的表按列变成几张表的方法,这样可以降低表的复杂度和字段的数目,从而达到优化的目的。
(以前,在银行做过项目,见过一张表有100多个字段,很恐怖)
示例一:在Users表中有一个字段是家庭地址,这个字段是可选字段,相比起,而且你在数据库操作的时候除了个人信息外,
你并不需要经常读取或是改写这个字段。那么,为什么不把他放到另外一张表中呢?
这样会让你的表有更好的性能,大家想想是不是,大量的时候,我对于用户表来说,
只有用户ID,用户名,口令,用户角色等会被经常使用。小一点的表总是会有好的性能。
示例二: 你有一个叫 “last_login” 的字段,它会在每次用户登录时被更新。
但是,每次更新时会导致该表的查询缓存被清空。所以,你可以把这个字段放到另一个表中,
这样就不会影响你对用户ID,用户名,用户角色的不停地读取了,因为查询缓存会帮你增加很多性能。
另外,你需要注意的是,这些被分出去的字段所形成的表,你不会经常性地去Join他们,不然的话,这样的性能会比不分割时还要差,而且,会是极数级的下降。
17. 拆分大的 DELETE 或 INSERT 语句
如果你需要在一个在线的网站上去执行一个大的 DELETE 或 INSERT 查询,你需要非常小心,
要避免你的操作让你的整个网站停止相应。因为这两个操作是会锁表的,表一锁住了,别的操作都进不来了。
Apache 会有很多的子进程或线程。所以,其工作起来相当有效率,而我们的服务器也不希望有太多的子进程,
线程和数据库链接,这是极大的占服务器资源的事情,尤其是内存。
如果你把你的表锁上一段时间,比如30秒钟,那么对于一个有很高访问量的站点来说,
这30秒所积累的访问进程/线程,数据库链接,打开的文件数,可能不仅仅会让你泊WEB服务Crash,
还可能会让你的整台服务器马上掛了。
所以,如果你有一个大的处理,你定你一定把其拆分,使用 LIMIT 条件是一个好的方法。下面是一个示例:
while (1) {
//每次只做1000条
mysql_query("DELETE FROM logs WHERE log_date <= '2009-11-01' LIMIT 1000");
if (mysql_affected_rows() == 0) {
// 没得可删了,退出!
break;
}
// 每次都要休息一会儿
usleep(50000);
}
18. 越小的列会越快
对于大多数的数据库引擎来说,硬盘操作可能是最重大的瓶颈。
所以,把你的数据变得紧凑会对这种情况非常有帮助,因为这减少了对硬盘的访问。
参看 MySQL 的文档 Storage Requirements 查看所有的数据类型。
如果一个表只会有几列罢了(比如说字典表,配置表),那么,我们就没有理由使用 INT 来做主键,
使用 MEDIUMINT, SMALLINT 或是更小的 TINYINT 会更经济一些。
如果你不需要记录时间,使用 DATE 要比 DATETIME 好得多。
当然,你也需要留够足够的扩展空间,不然,你日后来干这个事,你会死的很难看,
参看Slashdot的例子(2009年11月06日),一个简单的ALTER TABLE语句花了3个多小时,因为里面有一千六百万条数据。
19. 选择正确的存储引擎
在 MySQL 中有两个存储引擎 MyISAM 和 InnoDB,每个引擎都有利有弊。
酷壳以前文章《MySQL: InnoDB 还是 MyISAM?》讨论和这个事情。
MyISAM 适合于一些需要大量查询的应用,但其对于有大量写操作并不是很好。
甚至你只是需要update一个字段,整个表都会被锁起来,而别的进程,就算是读进程都无法操作直到读操作完成。
另外,MyISAM 对于 SELECT COUNT(*) 这类的计算是超快无比的。
InnoDB 的趋势会是一个非常复杂的存储引擎,对于一些小的应用,它会比 MyISAM 还慢。
他是它支持“行锁” ,于是在写操作比较多的时候,会更优秀。并且,他还支持更多的高级应用,比如:事务。
21. 小心“永久链接”
“永久链接”的目的是用来减少重新创建MySQL链接的次数。当一个链接被创建了,它会永远处在连接的状态,
就算是数据库操作已经结束了。而且,自从我们的Apache开始重用它的子进程后——也就是说,
下一次的HTTP请求会重用Apache的子进程,并重用相同的 MySQL 链接。
PHP手册:mysql_pconnect()
在理论上来说,这听起来非常的不错。但是从个人经验(也是大多数人的)上来说,这个功能制造出来的麻烦事更多。因为,你只有有限的链接数,内存问题,文件句柄数,等等。
而且,Apache 运行在极端并行的环境中,会创建很多很多的了进程。
这就是为什么这种“永久链接”的机制工作地不好的原因。在你决定要使用“永久链接”之前,
你需要好好地考虑一下你的整个系统的架构。
分享到:
相关推荐
2、代码特点:今年全新,手工精心整理,放心引用,数据来自权威,相对于其他人的控制变量数据准确很多,适合写论文做实证用 ,不会出现数据造假问题 3、适用对象:大学生,本科生,研究生小白可用,容易上手!!! 3...
2. **年末常住人口**:显示每年底上海市的实际居住人口数量。 3. **增长率**:可能提供每年的人口增长百分比,用于分析人口变动趋势。 4. **年龄结构**:不同年龄段人口分布,如儿童、劳动力和老年人口比例。 5. **...
本数据基于各地公布数据,经数据处理软件汇总、整理、计算得来,亲测可用。 主要指标: 行政区划代码 地区 长江经济带 经度 纬度 年份 地区生产总值(亿元) 年末常住人口(万人) 本数据文件名上列出的指标 数据无缺失...
连续二年亏损,特别处理。 *ST---公司经营连续三年亏损,退市预警。 PT是英 文Particular Transfer(特别转让)的缩写。依据《公司法》和《证 券法》规定,上市公司出现连续三年亏损等情况,其股票将暂停上市。 2、...
本数据整理1984年全国各地级市的年末总人口数,年末邮电局数、年末固定电话机数、年末邮电业务总量、年末每百万人邮局数、年末每百人固定电话数等统计数据。参考黄群慧(2019)关于互联网的工具变量;参考赵涛等做法...
本数据整理全国各地区2003-2020年城乡居民储蓄年末余额年度统计数据,金融机构贷款余额年度统计,金融机构存款余额统计。 指标:城乡居民储蓄年末余额年度统计数据,金融机构贷款余额年度统计,金融机构存款余额统计
连续二年亏损,特别处理。 *ST---公司经营连续三年亏损,退市预警。 PT是英 文Particular Transfer(特别转让)的缩写。依据《公司法》和《证 券法》规定,上市公司出现连续三年亏损等情况,其股票将暂停上市。 2、...
ST----公司经营连续二年 亏损,特别处理。 *ST---公司经营连续三年亏损,退市预警。 PT是英文Par ticular Transfer(特别转让)的缩写。依据《公司法》和《证券法》规 定,上市公司出现连续三年亏损等情况,其股票将...
2区间内有一年年末是ST、*ST的取值为1 区间内是否PT: 1990-2022 区间内有一年年末是PT的取值为1 区间内是否ST或PT:1990-2022区间内 有一年年末是ST或PT的取值为1 可以和自己的数据进行匹配后 * 剔除代码示例 use ...
结转新账套需确保所有必要数据已正确转移,历史数据清除工具则用于整理旧账套,避免数据冗余。 综上所述,K3财务管理系统在年末进行年结时,需要全面考虑业务的完整性、数据的一致性和会计规则的合规性。通过合理的...
PLD_RATE2:年末控股股东 质押股数/公司总股本 对异常值进行处理 原始数据 整理结果 描述性统计 相关性分 析 附件下载 代码.do 之前版本,暂停下载 经管之家:momingiqmiao 7 欢迎关注,及时获取更多实用实证的数据 ...
2. **巧用LOOKUP函数判断季度**: 在整理按季度分类的数据时,可以通过LOOKUP函数实现。输入公式`=LOOKUP(MONTH(引用日期),{1,4,7,10},{Q1,Q2,Q3,Q4})`,该公式可以根据日期中的月份判断其所在的季度,并自动填充...
【服装销售经理年末总结】 在本年度的工作中,我作为服装销售经理,主要负责市场运作、团队管理和业务拓展。以下是我对一年工作的总结和归纳: 1. 市场知识学习与专业提升:我始终保持谦逊的态度,从零开始学习...
这些模板可以帮助用户高效地整理和呈现过去一年的工作成果、经验教训以及未来规划。 首先,我们要理解PPT(PowerPoint)模板的重要性。在商业环境中,一个精心设计的PPT模板能够提升演讲的专业性,吸引观众的注意力...
资源名称:A股上市环保企业和高能耗企业年末市值及其占比 时间范围:2008-2020年 覆盖区域:我国30个省A股上市公司 主要指标:环保企业和高能耗企业年末市值和A股年末总市值 ...数据来源:整理自Wind数据库
【银行档案工作情况年末总结】 本年度,我区农业银行系统的档案管理工作取得了显著成效,这得益于省分行办公室和各级档案行政管理部门的指导和支持,以及各级行领导的重视。银行档案管理工作紧密围绕《档案法》、...
通过收集和整理历年数据,报告不仅给出了舟山市事业单位年末就业人员的绝对数量,还将其与浙江省的平均水平进行了对比。这样的对比分析可以清晰地反映出舟山市在全国同类型城市中的就业规模和地位,以及其发展趋势。...