Submitted by gouki on 2008, December 27, 11:57 PM
内容来自cnbeta,未作删减。原文网址:http://www.cnbeta.com/articles/73351.htm
内容如下:
据中国站长站报道,国内知名操作系统DIY商雨林木风宣布解散,雨林木风工作室负责人罗先生表示消息属实,并发来正式声明.
罗先生表示,雨林木风工作室选择此举也属无奈,随着国内版权意识的加强、以及早些时候的番茄花园事件.雨林木风的关闭也属大势所趋.而随着雨林木风的关 闭,雨林木风所提供的系统也将成为历史.所有版本仅供爱好者收集纪念,禁止非法用途及传播.而关于雨林木风工作室解散以后的动向问题,罗先生并未回应.
以下为声明全文:
亲爱的会员朋友们:
基于多方面的原因,我们不得不很遗憾地告诉大家,经过雨林木风工作室管理层慎重考虑,决定于2008年12月31日起正式解散.今后,雨林木风将以自主研 发软件产品为主,继续为网民提供服务(不再进行未开源操作系统技术研究),所有成员与工作室脱离一切隶属关系,而雨林木风论坛将继续独立运营,不受本工作 室解散之影响.
为了铭记这些曾经为我们提供了精品资源的技术精英们,同时,也为众多的论坛会员留下一份美好的回忆,我们特别奉献一套经典收藏版[包括:雨林木风 Ghost XP SP3 装机版 YN9.9;雨林木风 Ghost XP SP3 纯净版 YN6.0;雨林木风 WinXP SP3 安装版 YS8.0;雨林木风 Windows Vista ULTIMATE With SP1 精简版V2.1]以供大家收藏留念,禁止非法用途及传播.
历经三载,我们风雨同行,一路走来,雨林木风工作室由衷地感谢各界朋友们对我们的支持与厚爱!雨林木风工作室也将成为一段历史!再次感谢3年来一直支持着本工作室作品的雨林木风迷们!希望大家能继续支持雨林木风旗下软件部门推出的其他软件产品.
特此声明!
雨林木风工作室
二〇〇八年十二月二十六日
Tags: 新闻, 解散, 雨林木风
Misc | 评论:0
| 阅读:17776
Submitted by gouki on 2008, September 15, 11:38 PM
Submitted by gouki on 2008, August 12, 1:28 PM
问题描述:
我们要访问的表是一个非常大的表,四千万条记录,id是主键,program_id上建了索引。
执行一条SQL:
select * from program_access_log where program_id between 1 and 4000
这条SQL非常慢。
我们原以为处理记录太多的原因,所以加了id限制,一次只读五十万条记录
select * from program_access_log where id between 1 and 500000 and program_id between 1 and 4000
但是这条SQL仍然很慢,速度比上面一条几乎没有提升。
Mysql处理50万条记录的表,条件字段还建了索引,这条语句应该是瞬间完成的。
问题分析:
这张表大约容量30G,数据库服务器内存16G,无法一次载入。就是这个造成了问题。
这条SQL有两个条件,ID一到五十万和Program_id一到四千,因为program_id范围小得多,mysql选择它做为主要索引。
先通过索引文件找出了所有program_id在1到4000范围里所有的id,这个过程非常快。
接下来要通过这些id找出表里的记录,由于这些id是离散的,所以mysql对这个表的访问不是顺序读取。
而这个表又非常大,无法一次装入内存,所以每访问一条记录mysql都要重新在磁盘上定位并把附近的记录都载入内存,大量的IO操作导致了速度的下降。
问题解决方案:
1. 以program_id为条件对表进行分区
2. 分表处理,每张表的大小不超过内存的大小
然而,服务器用的是mysql5.0,不支持分区,而且这个表是公共表,无法在不影响其它项目的条件下修改表的结构。
所以我们采取了第三种办法:
select * from program_access_log where id between 1 and 500000 and program_id between 1 and 15000000
现在program_id的范围远大于id的范围,id被当做主要索引进行查找,由于id是主键,所以查找的是连续50万条记录,速度和访问一个50万条记录的表基本一样
总结:
这是一个在千万笔记录表中由于使用了索引导致了数据查找变慢的问题,有一定的典型性和大家交流下!
————END————
索引这个东西很害人的。好的时候很好。。。用的不好。那真的是害己害人啊。
本来来自:PHP5研究室,责编:抽烟的蚊子,网址:http://www.phpv.net/html/1624.html
Tags: mysql, database, 索引, 优化, 技巧
Baby | 评论:0
| 阅读:26488
Submitted by gouki on 2008, August 6, 11:08 PM
经常在使用MYSQL,那么总是有一些小技巧的,我在这里稍稍介绍一点,这也是日常工作中常用到的。
1、尽量在SQL中对字段使用函数(条件部分)
在WHERE条件中,对字段使用函数的时候,往往就自动放弃了该字段的索引值了。举例:
SQL代码
- SELECT * FROM order WHERE YEAR(OrderDate)<2001;
-
- SELECT * FROM order WHERE OrderDate<"2001-01-01";
第二句会比第一句快很多,数据少可能看不出,数据量超过50W以后将非常明显。
2、尽量在SQL的条件中先取值再比较
SQL代码
- SELECT * FROM inventory WHERE Amount/7<24;
-
- SELECT * FROM inventory WHERE Amount<24*7;
虽然取回来的值都一样,但是。。。第一句是拿字段中的值先进行计算,再比较大小,而第二句却仅仅比较大小,谁快谁慢,一眼便知。
3、在搜索字符型字段时,我们有时会使用 LIKE 关键字和通配符,这种做法虽然简单,但却也是以牺牲系统性能为代价的。(这个我自己没有测过,不能乱讲)。。。
例如下面的查询将会比较表中的每一条记录。
SQL代码
- SELECT * FROM books WHERE name like "MySQL%"
但是如果换用下面的查询,返回的结果一样,但速度就要快上很多:
SQL代码
- SELECT * FROM books WHERE name>="MySQL"and name<"MySQM"
4、应该注意避免在查询中让MySQL进行自动类型转换,因为转换过程也会使索引变得不起作用。
5、为字段选用最恰当的属性
MySQL可以很好的支持大数据量的存取,但是一般说来,数据库中的表越小,在它上面执行的 查询也就会越快。因此,在创建表的时候,为了获得更好的性能,我们可以将表中字段的宽度设得尽可能小。例如,在定义邮政编码这个字段时,如果将其设置为 CHAR(255),显然给数据库增加了不必要的空间,甚至使用VARCHAR这种类型也是多余的,因为CHAR(6)就可以很好的完成任务了。同样的, 如果可以的话,我们应该使用MEDIUMINT而不是BIGIN来定义整型字段。
另外一个提高效率的方法是在可能的情况下,应该尽量把字段设置为NOT NULL,这样在将来执行查询的时候,数据库不用去比较NULL值。
对于某些文本字段,例如“省份”或者“性别”,我们可以将它们定义为ENUM类型。因为在MySQL中,ENUM类型被当作数值型数据来处理,而数值型数据被处理起来的速度要比文本类型快得多。这样,我们又可以提高数据库的性能。
6、使用命令复制表时,请先禁止源表中的索引,因为在COPY的过程中,MYSQL会同样复制索引,而不是复制数据后重建索引,因此建议COPY前先禁用,然后COPY完后,为目标表添加相应的索引。
Tags: mysql, 技巧
Baby | 评论:0
| 阅读:21828
Submitted by gouki on 2008, August 6, 10:41 PM
在工作中我总是会发现有些人的程序里有些不妨碍程序正常执行的小问题,并且很多人都常常愿意这样写,下面我列举一下
1.php属于弱语言,所以在使用一个变量的时候,不需要为其指定变量类型和初始化值,但是我强烈建议在使用一个变量前,先为其初始化一个默认值,这样既安全又规范
2.
if (条件表达式1 && 条件表达式2)
//do something
else
//do something
?>
当进行与运算操作的时候,最好把最可能返回"False"的表达式放在操作的前面,这样当if条件遇到false后,就不在执行false以后的运算了,这样加快程序的执行速度,但是要注意一点的是false以后的条件表达式如果是个赋值的表达式,例如:
$a = 1;
$b = 0;
if (($a > 1) && ($b = 2))
?>
这段程序在$a > 1这个地方就执行完了,$b = 2的赋值操作将不再执行,结果$b的值还是0.
3.在使用mysql数据库的时候,执行"select count"操作的时候,尽量使用count(*)而不是count(一个字段),count(*)会直接使用索引文件进行统计(inndb类型的表除外)而不是去遍历整个数据表
4.在使用group by的时候,如果没有必要对返回结果集合进行排序,建议加上"order by null",这样会减少一步排序的操作
5.为table建立复合索引的时候,比如"name-city-age"这个索引,这个索引是由表中的字段name,city,age组成的,虽然我们 只为这张表建立了一个索引,但其实...嘿嘿嘿...这是三个索引,恩,哪三个索引呢...name,name-city,name-city-age这 三个索引,请注意,复合索引遵循的是最左原则,所以name-age,city-age将不会使用索引...
6.在建索引的时候,如果能保证这个(复合)索引的字段(组合)的值肯定是唯一值,那么就把这个(复合)索引建成唯一索引...
取自abetterday的博客:http://www.phpwap.cn/?action=articleContent&articleId=153
Tags: 技巧, 忽略, 简单, php
PHP | 评论:0
| 阅读:19447