MySQL索引使用

 

最近做一些优化的工作,看到了这篇文章,转之,原来地址:

http://www.owe-love.com/myspace/?action=show&id=181

情况:有的时候对一个表创建了索引,但是可能没有用上索引。现在来分析一下到底是什么情况下索引可以用到什么情况下索引又用不到了。

一、索引的意义:
优点:
索引用来快速地寻找那些具有特定值的记录,如果没有索引,执行查询时必须从第一个记录开始扫描表中所有记录,表里面的记录数量越多,这个操作的代价就越高。

缺点:
索引要占用磁盘空间;且任何写操作涉及的索引个数多的话会引起降速,因为 MySQL 不仅要把改动数据写入数据文件,而且它还要把这些改动写入索引文件。

另外索引会占据磁盘空间。特别是一些大表创建组合索引的时候更加要注意这一点!  

二、索引理论学习

索引分单列索引和组合索引。单列索引,即一个索引只包含单个列,一个表可以有多个单列索引,但这不是组合索引。组合索引,即一个索包含多个列。

相关的创建语句:
单列的情况: create index one_column on testtb(c1);
多列的情况: create index mult_column on testtb(c1,c2);

2.1  索引类型:
(1) 普通索引
这是最基本的索引,它没有任何限制。创建的语法就是上面所写的方法了!
删除的语句: DROP INDEX [indexName] ON mytable;[break]

(2) 唯一索引
它与前面的普通索引类似,不同的就是:索引列的值必须唯一,但允许有空值。如果是组合索引,则列值的组合必须唯一。它有以下几种创建方式:
创建索引
CREATE UNIQUE INDEX indexName ON mytable(username(length))
PS :允许空,但是这个列的值必须唯一,如果事先有值而且有重复的值就不可以创建这样的索引了。
ERROR 1062 (23000): Duplicate entry '0' for key 1    报类似于这样的错误!

(3) 主键索引
它是一种特殊的唯一索引,不允许有空值。 一般是在建表的时候同时创建主键索引
CREATE TABLE mytable( ID INT NOT NULL, username VARCHAR(16) NOT NULL, PRIMARY KEY(ID) );
当然也可以用  ALTER  命令。记住:一个表只能有一个主键。
PS :默认在创建一个主键的时候就自动会有一个主键索引出来!

(4) 组合索引
为了形象地对比单列索引和组合索引,为表添加多个字段:
CREATE TABLE mytable( ID INT NOT NULL, username VARCHAR(16) NOT NULL, city VARCHAR(50) NOT NULL, age INT NOT NULL );
为了进一步榨取 MySQL 的效率,就要考虑建立组合索引。就是将  name, city, age 建到一个索引里:
ALTER TABLE mytable ADD INDEX name_city_age (username(10),city,age);
PS :在创建索引的时候还可以指定一个字段其大小值 ! 而且如果在插入的值中超过了索引的长度值的话还是可以成功保存进来的
建表时, usernname 长度为  16 ,这里用  10 。这是因为一般情况下名字的长度不会超过 10 ,这样会加速索引查询速度,还会减少索引文件的大小,提高 INSERT 的更新速度。
PS :哪怕是你插入的值超过了 10 也是可以成功被插入进来的
如果分别在  usernname city age 上建立单列索引,让该表有 3 个单列索引,查询时和上述的组合索引效率也会大不一样,远远低于我们的组合索引。虽然此时有了三个索引,但 MySQL 只能用到其中的那个它认为似乎是最有效率的单列索引。
PS :当一个表中同时存在多个单列索引的时候, MySQL 就会考虑使用最有效率的那个单列索引值。
建立这样的组合索引,其实是相当于分别建立了下面三组组合索引:
usernname,city ,age username   ,city usernname
为什么没有  city age 这样的组合索引呢 ? 这是因为 MySQL 组合索引 最左前缀 的结果。简单的理解就是只从最左面的开始组合。并不是只要包含这三列的查询都会用到该组合索引,下面的几个 SQL 就会用到这个组合索引:
SELECT * FROM mytable WHREE username="admin" AND city="
郑州
SELECT * FROM mytable WHREE username="admin"
而下面几个则不会用到:
SELECT * FROM mytable WHREE age=20 AND city="
郑州
SELECT * FROM mytable WHREE city=" 郑州 "
PS 在使用组合索引的时候要注意在什么情况下可以用到索引,而在什么情况下又用不到索引。这个就要分析最左前缀的法则处理了!

7) 使用索引的注意事项
使用索引时,有以下一些技巧和注意事项:
◆索引不会包含有 NULL 值的列
只要列中包含有 NULL 值都将不会被包含在索引中,复合索引中只要有一列含有 NULL 值,那么这一列对于此复合索引就是无效的。所以我们在数据库设计时不要让字段的默认值为 NULL
PS :如果某一列的默认值为 NULL 的话,就不可以在此列上面创建索引了。因为即使你创建了索引也用不上
◆使用短索引
对串列进行索引,如果可能应该指定一个前缀长度。例如,如果有一个 CHAR(255) 的列,如果在前 10 个或 20 个字符内,多数值是惟一的,那么就不要对整个列进行索引。短索引不仅可以提高查询速度而且可以节省磁盘空间和 I/O 操作。
PS :在创建索引的语句的时候要注意定义好该字段的长度值
◆索引列排序
MySQL
查询只使用一个索引,因此如果 where 子句中已经使用了索引的话,那么 order by 中的列是不会使用索引的。因此数据库默认排序可以符合要求的情况下不要使用排序操作 ; 尽量不要包含多个列的排序,如果需要最好给这些列创建复合索引。
PS :对于有多列的组合排序操作的时候要考虑使用复合索引技术
like 语句操作
一般情况下不鼓励使用 like 操作,如果非使用不可,如何使用也是一个问题。 like “%aaa%”  不会使用索引而 like “aaa%” 可以使用索引。
PS :要注意什么时候会用到索引,什么时候用不到索引
◆不要在列上进行运算
select * from users where YEAR(adddate)<2007;
将在每个行上进行运算,这将导致索引失效而进行全表扫描,因此我们可以改成
select * from users where adddate<‘2007-01-01 ’;
PS :计算之后就用不到索引了
◆不使用 NOT IN <> 操作
以上,就对其中 MySQL 索引类型进行了介绍。
结论:通过上面的理论我们学习到了   索引的类型、组合索引的时候如何排列才能用到索引值。另外要注意的是在创建完索引之后如何写 SQL 语句才能用到索引值。提高查询效率

三、什么时候使用索引
分析 DEMO
假如有这样的一条 SQL 语句
SELECT * FROM tbl_name WHERE col1=val1 AND col2=val2;
如果在  col1   col2  上有一个多字段索引的话,就能直接取得对应的记录了。如果在  col1   col2  分别有独立的索引,那么优化程序会先找到限制最多的那个索引,然后根据哪个索引能找到更少的记录就决定使用哪个索引。
PS   这就体现出来了组合索引的高效性。通过组合索引能够加快查询的速度。如果分别创建索引的话 MYSQL 就会按照哪种方式能够找到最少记录的决定使用哪个索引值的!
果表里有一个多字段索引的话,那么该索引的任何最左前缀部分都可以被优化程序用来检索记录。例如,在  (col1, col2, col3)  上有一个索引,那么按字段组合  (col1), (col1, col2),   (col1, col2,col3)  搜索的时候都会用到索引。
PS :在上面我们也讲到了   最左前缀   原则。即如果有组合索引的时候要注意   我们的 SQL 语句的写法一定要考虑到最左前缀的方式。如果写法上面的次序有乱的话就可能用不到索引了。
理解最左前缀 的一个示例:
SELECT * FROM tbl_name WHERE col1=val1; 
SELECT * FROM tbl_name WHERE col2=val2; 
SELECT * FROM tbl_name WHERE col2=val2 AND col3=val3;
如果在  (col1, col2, col3)  上有一个索引,只有第一个查询用到索引了。第二和第三个尽管包括了索引字段,但是 (col2)   (col2, col3)  并非索引  (col1, col2, col3)  的最左前缀部分。
PS 如果在 (col1, col2, col3)  建立的组合索引的话所谓的最左前缀的含义就是 col1 打头的都可以用到这个组合索引。即会出现如下的情况 (col1), (col1, col2),   (col1, col2,col3)  
所以如果你在写 SQL 语句的时候一定要注意好这种次序!  

有些时候尽管有可用的索引, MySQL 也不会用到它们。一种情况是优化程序认为如果使用索引会需要检索更大部分的表记录 ( 这时候,扫描表可能更快,因为这支需要更少的搜索 ) 。尽管如此,如果有一个查询用  LIMIT  限制只检索部分记录, MySQL 就一定会使用索引,因为这样能更快检索到更少记录来返回给结果。


smarteng 发布于 2010-6-22 07:11

随想:人人网之新鲜事存储实现

现在的SNS太火了,大家都在搞SNS,

我也很喜欢用这个,呵呵,从07年开始就一直在用校内网,现在的人人网,

每天总想登陆看看好友的新鲜事,

最近被问到这么个问题:

如何设计实现好友的新鲜事存储,设计一下数据结构,以及实现的方法,

说实话对这个用户数量巨大的系统,存储还真是个问题,

正好看了一篇文章  《又拍网架构中的分库设计》[break]

从中摘录一段:

 

垂直拆分:是指按功能模块拆分,比如可以将群组相关表和照片相关表存放在不同的数据库中,这种方式多个数据库之间的表结构不同。

水平拆分:而水平拆分是将同一个表的数据进行分块保存到不同的数据库中,这些数据库中的表结构完全相同。

拆分方式

一般都会先进行垂直拆分,因为这种方式拆分方式实现起来比较简单,根据表名访问不同的数据库就可以了。但是垂直拆分方式并不能彻底解决所有压力问题,另外,也要看应用类型是否合适这种拆分方式。如果合适的话,也能很好的起到分散数据库压力的作用。比如对于豆瓣我觉得比较适合采用垂直拆分, 因为豆瓣的各核心业务/模块(书籍、电影、音乐)相对独立,数据的增加速度也比较平稳。不同的是,又拍网的核心业务对象是用户上传的照片,而照片数据的增加速度随着用户量的增加越来越快。压力基本上都在照片表上,显然垂直拆分并不能从根本上解决我们的问题,所以,我们采用水平拆分的方式。

拆分规则

水平拆分实现起来相对复杂,我们要先确定一个拆分规则,也就是按什么条件将数据进行切分。 一般2.0网站都以用户为中心,数据基本都跟随用户,比如用户的照片、朋友和评论等等。因此一个比较自然的选择是根据用户来切分。每个用户都对应一个数据库,访问某个用户的数据时, 我们要先确定他/她所对应的数据库,然后连接到该数据库进行实际的数据读写。

那么,怎么样对应用户和数据库呢?我们有这些选择:

按算法对应

最简单的算法是按用户ID的奇偶性来对应,将奇数ID的用户对应到数据库A,而偶数ID的用户则对应到数据库B。这个方法的最大问题是,只能分成两个库。另一个算法是按用户ID所在区间对应,比如ID在0-10000之间的用户对应到数据库A, ID在10000-20000这个范围的对应到数据库B,以此类推。按算法分实现起来比较方便,也比较高效,但是不能满足后续的伸缩性要求,如果需要增加数据库节点,必需调整算法或移动很大的数据集, 比较难做到在不停止服务的前提下进行扩充数据库节点。

按索引/映射表对应

这种方法是指建立一个索引表,保存每个用户的ID和数据库ID的对应关系,每次读写用户数据时先从这个表获取对应数据库。新用户注册后,在所有可用的数据库中随机挑选一个为其建立索引。这种方法比较灵活,有很好的伸缩性。一个缺点是增加了一次数据库访问,所以性能上没有按算法对应好。

比较之后,我们采用的是索引表的方式,我们愿意为其灵活性损失一些性能,更何况我们还有memcached, 因为索引数据基本不会改变的缘故,缓存命中率非常高。所以能很大程度上减少了性能损失。

索引表的方式能够比较方便地添加数据库节点,在增加节点时,只要将其添加到可用数据库列表里即可。 当然如果需要平衡各个节点的压力的话,还是需要进行数据的迁移,但是这个时候的迁移是少量的,可以逐步进行。要迁移用户A的数据,首先要将其状态置为迁移数据中,这个状态的用户不能进行写操作,并在页面上进行提示。 然后将用户A的数据全部复制到新增加的节点上后,更新映射表,然后将用户A的状态置为正常,最后将原来对应的数据库上的数据删除。这个过程通常会在临晨进行,所以,所以很少会有用户碰到迁移数据中的情况。

从中得到了启发,

大体猜想了一下人人网新鲜事的存储:

首先,人人网的用户数已经相当多了,

用户的存储也会按照规则分配到不同的服务器群上,

之后按照人人网的功能模块来垂直拆分,不同的业务分到不同的服务器上,

这是所有的业务存储,(这只是我的猜测),

关键是这个好友新鲜事的问题了,

我猜,是一个好友更新了一个业务(日志,图片,分享),之后在自己所在的服务器上记录一下,

之后通过“消息系统” , 来通知其他的好友所在的服务器,执行一个新鲜事的插入操作,这其中肯定会有Memcache缓存等的处理,这个咱们就不谈了。  

在多个服务器上写一下好友的新鲜事记录表,这样就用冗余换效率了, 用户一登陆,只要查一下自己的好友新鲜事表就可以得到人人网的登陆之后首页的好友新鲜事了,就取一次,效率肯定会高些,

接下来,就是这个“消息系统”了,如何来通知呢,关键就是这个消息系统,

如果没有消息中间件完成信息交换,应用开发者为了传输数据,必须要学会如何用网络和操作系统软件的功能,编写相应的应用程序来发送和接收信息,且交换信息没有标准方法,每个应用必须进行特定的编程从而和多平台、不同环境下的一个或多个应用通信。例如,为了实现网络上不同主机系统间的通信,将要求具备在网络上如何交换信息的知识(比如用TCP/IP的socket程序设计);为了实现同一主机内不同进程之间的通讯,将要求具备操作系统的消息队列或命名管道(Pipes)等知识。

幸亏Java中有像JMS这种消息系统(不是Java佬,这个也是听yhustc说的^_^),开源,而且有广泛的应用,所以用它比较合适,当然人人网用的什么不得而知,反正就是通过一个中间件,这个“消息系统”中间件  把插入,删除,更新操作  分发到不同的服务器上面,服务器上面的消息系统客户端  收到消息后 ,来操作数据, 实现好友新鲜事的存储。

这样一个个通知到,并返回一个状态。成功与否,消息系统再做一些处理,更新所有的好友新鲜事表完成。

SNS也是一个区域化的,也就是说,可能他一共有 1000个好友, 其中 500个好友 在同一台服务器上存储,另有一台存 300个好友,再就是其他的零散的了好友分散在不同的服务器上了,

这样所需要通知的服务器就不会很多(肯定小于等于202个了^_^),

所有开销相对就较小了,

说说这个每个用户的好友新鲜事表 ,

这个也是好友的更新记录,不是用户实际存储的数据,(用户实际存储的数据是存到”不同的业务分到不同的服务器上“),可以定期清除一下,以保持效率。

大体分析就是这样的,以上都是猜测,请不要拍砖。

感谢yhustc的指导 ^_^

————————————————————————

今天下午看了一些伟大的uchome,

大体看了一下,貌似uchome 没有好友新鲜事呀(今天下午才测试,没看仔细,要是有也别骂我),

但是有个全站动态,里面存的所有人的动态,等用户登录的时候,会取出100条来显示。

这些内容都放在 feed表中。


smarteng 发布于 2010-6-19 05:05

UNIX环境高级编程读书笔记连载之UNIX信号

Unix信号真是一个有趣的东西,以前仅仅知道键入Control+C时,结束程序,但不知原理是什么,今天我就来和大家一起学习这玩意,希望大家都有收获。

       所有的信号量,例如SIGINT事实上在头文件中都有定义,linux内核在Linux 2.4.22以上的,可以在/usr/include/bits/signums.h可以找到定义,看见没有,信号都是非负的整数,没啥神秘的,哈哈。

在linux终端下运行程序后,当你键入Control+C时,程序就终结了。这是因为当你键入Control+C时,相当于向当前进程发送了SIGINT信号,进程收到此信号的默认动作是立即退出。信号是异步的,进程不知道什么时候收到信号,那么产生信号的方式有那些呢?听在下慢慢道来[break]:

(1)   用户通过键盘键入信号,如Control+C代表中断SIGINT,Control+\代表退出SIGQUIT,Control+Z代表停止SIGSTOP,等等。前台进程(fore ground process)收到这些信号后,就会采取相应动作。

(2) 硬件产生信号,如除0产生SIGFPE信号,内存地址引用出错产生SIGSEGV段错误信号。

(3)   Kill函数,瞧瞧它原型就知道他能干什么了,int kill(pid_t pid, int signo);可不是像它的名字一样,kill事实上不是杀死进程pid,而是向进程号为pid的进程发送信号signo,当然前提是你是这个进程的属主或是NB的超级管理员。

(4)   Kill命令也能向进程发送信号,事实上,kill命令就是kill函数的包装而已,通常是用来杀掉后台进程。Man一下kill你就知道这个命令的用法了。

(5)   software本身也能产生信号,如一个子进程结束时用SIGCHLD通知父进程;调用alarm()时产生的SIGALRM信号,socket套接口编程中常见的SIGPIPE信号,等等。

当信号产生时,处理的方式只有三种,忽略,默认处理或使用指定的信号安装函数。

(1)   忽略信号几乎适用于所有的信号,不过有两个信号除外,SIGKILL和SIGSTOP,要是这两个信号可以忽略,还真不知道怎么干掉后台进程,那岂不是很郁闷?试一试打开linux下的编辑工具vi,键入Control+C没有退出,而键入Control+Z时立马退出,是不是?

(2)   默认处理一般是终结进程,各种发行版本的对各个信号的默认处理有一点不同,详见APUE的10.2节。

(3)   信号安装函数是自己决定对捕获的信号如何处理,这是本章最神秘的内容,学会了这个,你就能玩明白信号编程了,需要注意的是,与忽略信号相似的是,SIGKILL和SIGSTOP信号不能被信号安装函数捕获。

各个信号的意义嘛,我就不一一介绍了,我也不大明白,只是知道几个常用的,详情请参阅APUE的10.2节。

下回预告:Signal()函数,不可靠信号,被信号中断的系统调用,可重入的函数

 

Unix信号量也可以在文件/usr/include/sys/signal.h中查看

#define SIGHUP  进程由於控制终端死去或者控制终端发出起命令 

#define SIGINT  键盘中断所产生的信号 

#define SIGQUIT  键盘终止 

#define SIGILL  非法的指令 

#define SIGTRAP   进程遇到一个追踪(trace)或者是一个中断嵌套 

#define SIGABRT  由abort系统调用所产生的中断信号 

#define SIGIOT  类似於SIGABRT 

#define SIGBUS   进程试图使用不合理的记忆体 

#define SIGFPE  浮点异常 

#define SIGKILL  KILL 

#define SIGUSR1  用户自定义 

#define SIGSEGV  段错误 

#define SIGUSR2  用户自定义 

#define SIGPIPE  管道操作时没有读只写 

#define SIGALRM 由alarm系统调用产生的timer时钟信号 

#define SIGTERM 收到终端信号的进程 

#define SIGSTKFLT 堆叠错误 

#define SIGCHLD  子进程向父进程发出的子进程已经stop或者终止的信号 

#define SIGCONT  继续运行的信号 

#define SIGSTOP  stop 

#define SIGTSTP  键盘所产生的stop信号 

#define SIGTTIN   当运行在後状态时却需要读取stdin的资料 

#define SIGTTOU   当运行在後状态时却需要写向stdout 

#define SIGURG   socket的紧急情况 

#define SIGXCPU  进程超额使用CPU分配的时间 

#define SIGXFSZ  进程使用了超出系统规定文件长度的文件 

#define SIGVTALRM  内部的alarm时钟过期 

#define SIGPROF  在一个程式段中描绘时钟集过期 

#define SIGWINCH 终端视窗的改变 

#define SIGIO 非同步IO 

#define SIGPOLL  SIGIO pollable事件发生

通过结合trap命令使用:trap <command-list>  <signal-list>

以上这些Unix信号量的知识,希望大家能够记住,方便以后我们的使用。


smarteng 发布于 2010-6-9 11:43

VI 中替代所有字符串

管理专家课堂和篮徒E站的几个服务器,避免不了要用VI来编辑一些文件,

今天又要批量替换一些东西,也小改了一把,感觉VI的确很方便,

下面是搜集的VI 替代字符串的方法:

 vi/vim 中可以使用 :s 命令来替换字符串。以前只会使用一种格式来全文替换,今天发现该命令有很多种写法(vi 真是强大啊,还有很多需要学习),记录几种在此,方便以后查询。
:s/vivian/sky/ 替换当前行第一个 vivian 为 sky
:s/vivian/sky/g 替换当前行所有 vivian 为 sky
:n,$s/vivian/sky/ 替换第 n 行开始到最后一行中每一行的第一个 vivian 为 sky
:n,$s/vivian/sky/g 替换第 n 行开始到最后一行中每一行所有 vivian 为 sky
n 为数字,若 n 为 .,表示从当前行开始到最后一行
:%s/vivian/sky/(等同于 :g/vivian/s//sky/) 替换每一行的第一个 vivian 为 sky
:%s/vivian/sky/g(等同于 :g/vivian/s//sky/g) 替换每一行中所有 vivian 为 sky
可以使用 # 作为分隔符,此时中间出现的 / 不会作为分隔符
:s#vivian/#sky/# 替换当前行第一个 vivian/ 为 sky/

出处:http://flaming.javaeye.com/blog/235313

VI真是个神器,得好好学习学习^_^


smarteng 发布于 2010-6-8 09:03

MySQL技术交流:InnoDB和MyISAM区别

技术交流的拓展:InnoDB和MyISAM区别

InnoDB和MyISAM是许多人在使用MySQL时最常用的两个表类型,这两个表类型各有优劣,视具体应用而定。基本的差别为:MyISAM类型不支持事务处理等高级处理,而InnoDB类型支持。MyISAM类型的表强调的是性能,其执行数度比InnoDB类型更快,但是不提供事务支持,而InnoDB提供事务支持已经外部键等高级数据库功能。


smarteng 发布于 2010-6-7 15:28

《迫在眉梢》&丹泽尔·华盛顿

《迫在眉梢》&丹泽尔·华盛顿:《约翰-Q》中文翻译是《迫在眉梢》,一片由尼克-卡萨维蒂(Nick Cassavetes)执导,多位实力派巨星--丹泽尔-华盛顿(Denzel Washington)、罗伯特-杜瓦尔(Robert Duvall)、詹姆斯-伍兹(James Woods)、安妮-海切(Anne Heche)、金伯利-埃莉斯(Kimberly Elise)、雷-利奥塔(Ray Liotta)和埃迪-格里芬(Eddie Griffin)分别在片中饰演角色。这个警示性的故事情节围绕一个急需器官移植的九岁儿子之父亲展开。


smarteng 发布于 2010-6-6 05:23

摄者就是一名杀手

    真正的杀手为了等待一个最好的出手时机往往会默默忍耐和守候很久;真正的摄者为了一个瞬间也可以等待同样长的时间。

  真正的杀手不会在意兵器,飞花摘叶,都是致命的武器;真正的摄者不会在意相机,只要是能成像的,都是利器神兵。

  真正的杀手不会重复自己的杀人方法,否则很快就会陷入被追捕的困境;真正的摄者不会重复自己的表达手法,那是艺术生命行将结束的征兆。

  真正的杀手总是在最关键的时刻冷静而稳定,不会被情绪所影响;真正的摄者总是在激动人心的时候保持冷静的那个人。[break]

  真正的杀手善于从无人留意的角度以出人意外的方式出手;真正的摄者善于在无人留意的地方发掘独特的角度。

  真正的杀手总会在合适的时间出现在合适的地点;真正的摄者也会具备同样的素质。

  真正的杀手不会在意被杀的人是谁,只在意杀人的方法和结果;真正的摄者不会介意题材,只会介意表达方式和意念。

  真正的杀手没有门派,不会加入任何组织,世界上没有人知道他们的名字;真正的摄者默默无闻,只会拍照。

  真正的杀手不会向人们炫耀杀人记录,他只会认真杀好每一个人;真正的摄者不会流露自己的辉煌往事,只用片子向人们说明一切。

  真正的杀手会为了钱而杀人,但他们不会仅仅为了钱;真正的摄者也同样。

  真正的杀手往往会使人觉察不到他到过现场;真正的摄者会让你觉得就在现场。

  真正的杀手不会为了美观多样而选择杀人方法,只会选择最直接的;真正的摄者不会为了表现技巧而表演,他们只选择最合适的手法。

  真正的杀手不会成群结队的工作;真正的摄者也不会。

  真正的杀手总是隐没在人群中,无人知晓,沉默无言;真正的摄者往往是孤独寂寞的,出现在世界的任何一个角落。

摘自:数码生存 -小林的摄影设计手绘文字   

http://www.inkcn.com/v80/ReadNews.asp?NewsID=1056

 

小林简介:

  广东湛江人,毕业于中山大学,现在生活工作于广州。

  喜欢摄影,旅行,国画,书法,漫画,写作,设计,阅读,美食,钓鱼等等。

  国务院新闻办图片库(CFP)签约摄影师。

  POCO摄影网人文记实版版主,2006-2007、2007-2008、2008-2009、2009-2010年度POCO全国十佳记实摄影师。

  《电脑报》时尚数码摄影栏目专栏作者。

  图文作品常发表的杂志有:《中国国家地理》、《中国摄影报》、《摄影之友》、《博物》、《国家人文地理》、《电脑报》、《新潮电子》、《山东画报》、《旅行家》、《人民画报》、《巅峰地理》、《东方航线》、《中国航空》、《东方风情》、《厦门航空》、《东方航空》、《旅游新报》、《读者》、《城市地理》、《广游天下》、《自驾游》、《市场瞭望》、《时尚旅游》、《南方日报》、《主流》、《瑞丽》、《北京娱乐周刊》、《当代青年》等。

ps:很早就开始看小林(暂且这么叫)的数码生存了,

很喜欢他拍的人物,那么的平淡,却展现出不平淡的感觉,我会继续关注~ 


smarteng 发布于 2010-6-3 05:17

修炼之经典小语句

●说吧,你是想死呢还是不想活了? 

●好久没有人把牛皮吹的这么清新脱俗了! 

●你给我滚,马不停蹄的滚…… 

●人人都说我丑,其实我只是美得不明显。 

●无理取闹,必有所图! [break]

_________________________________________________ 

●天被熬亮了。 

●不是路不平,而是你不行。 

●恶心妈妈抱着恶心哭得很伤心,为什么呢?因为恶心死了…… 

●要不是打不过你,我早就和你翻脸了。 

●我这心碎得,捧出来跟饺子馅似的。

_________________________________________________ 

●没人牵手,我就揣兜。 

●我的兴趣爱好可分为静态和动态两种,静态就是睡觉,动态就是翻身… 

●唉~这人要一没正形,连头痛都是偏的。 

●我这人不太懂音乐,所以时而不靠谱,时而不着调。 

●怎么会突然想哭?难道我也有些逆流成河的小忧伤? 

_________________________________________________ 

●好漂亮的美女叔叔啊! 

●我不跟猪摔跤有两个原因:首先这让我自己变得很脏,其次这让猪很高兴。 

●没事偷着乐是不太可能了,偷着胖还是有点儿希望. 

●放下屠刀立地成佛的意思是,你放下屠刀的那一刻对方把你砍成两瓣儿了。 

●没事可做时,觉得最累。

_________________________________________________ 

●李碧华说过: 什么叫多余?夏天的棉袄,冬天的蒲扇,还有等我已经心冷后你的殷勤。 

●永远年轻,永远装嫩,永远不知好歹,永远热泪盈眶。 

●我爸面对我发胖一事发表了看法:没有韩红的命,还得了韩红的病。 

●你来我信你不会走,你走我当你没来过。——我们该这样对待缘分与爱。 

●曾以为我是那崖畔的一枝花,后来才知道,不过是人海一粒渣。 

_________________________________________________ 

●荡气回肠,消化不良。 

●女人喜欢长的坏坏的男人,并不是喜欢长坏了的男人.. 

●麻子不叫麻子,坑人。 

●江湖险恶,不行就撤! 

●不敲几下,你不可能知道一个人或一个西瓜的好坏。 

_________________________________________________

●孤独的人常表现得很坚强;寂寞的人则多半温和。 

●大笑是绽放的微笑。 

●我的意中人是个绝色大美女,终于有一天她会骑着喷火的恐龙来嫁给我 

的,可是我看见了她的坐骑,却没有看见她的主人。 

●孤单是一个人的狂欢,狂欢是一群人的孤单。 

●虽不安分,也该守己。 

______________________________________________ 

●人不犯我,我不犯人。人若犯我,我就生气! 

●别逼我,否则我伟大起来,一发不可收拾。 

●我们是平凡的人,我们也是特别的人,所以我们是特别平凡的人。 

●那个人敢说自己纯净?瞧你那眼神就透着浑浊。 

●没有什么比弱者对强者的鄙视更无力了。 

_________________________________________________ 

●如有雷同,纯属你抄我 

●笨鸟先飞,笨猪先肥。 

●当你的眼泪忍不住要流出来的时候,睁大眼睛,千万别眨眼,你会看到世 

界由清晰到模糊的全过程。 

●告诉你别逼我,你要是再逼我,我就装死给你看。 

●年轻算什么,谁没年轻过?你老过吗?真是的 

_________________________________________________ 

●别用世故的样子来武装自己,它会水土不服。 

●解释就是掩饰,掩饰就是编故事。 

●所谓门槛,过去了便是门,过不去就成了槛。 

●陌生阻止你认识陌生的事物,熟悉妨碍你理解熟悉的事物。 

●人生的悲哀就在于,当你想两肋插刀的时候,却只有一把刀。 

_________________________________________________ 

● 如果全是老姜,将是一个何等辛辣的社会。 

● 狮子不会因为听到狗吠而回头。 

● 水越深,水流越平稳。 

●在你不当回事的时候,一切就好了起来。 

● 无论是国王还是农夫,只要能在自己家里找到安宁,他就是最幸福的人。 

_________________________________________________ 

● 一分钱一分货,稀饭吃了不经饿. 

● 水壶啊,你为什么哭泣,是因为屁股太烫了吗? 

● 如果命运抓住了伱的喉咙,伱就挠命运嘚胳肢窝。 

● 拦着成长的不是幼稚,而是自以为成熟。 

● 如果命运折断了你的腿,他会教你如何跛行 

__________________________________________________ 

● 打死你我也不说 

●左脑全是水,右脑全是面粉,不动便罢了,一动全是浆糊 

●挣钱就像用针掘地,花钱就像水渗进土里。 

●我也有要去的地方,只是我要去的地方,没道路通向那里。 

●你浪费的粮食都会堵在你去往天堂的路上。 

__________________________________________________ 

●生活是丰富多彩的,但我也有自己的颜色。 

●如果有一天我失踪了,只有两种可能:身体在旅行,或者灵魂在旅行。 

●讓人格与腦門一同閃亮。 

●你的丑和你的脸没有关系。 

●我从来没有欺骗过你,因为我从来没有欺骗你的必要。 

__________________________________________________ 

●我可以选择放弃,但我不能放弃选择。 

●天没降大任于我,照样苦我心志,劳我筋骨。 

●也许似乎大概是,然而未必不见得。 

●再过一百年,就长成了参天大葱。 

●幸福就是当你照镜子的时候,喜欢你看到的那个人


smarteng 发布于 2010-6-2 08:57

做事方法

又到了六月这个学生毕业,朋友别离的时节,

每每想起这些,心里总是一阵阵酸楚,

让我想到了纳兰容若的词:

       木兰花令 

        拟古决绝词 

    人生若只如初见,何事秋风悲画扇? 

    等闲变却故人心,却道故人心易变。  

    骊山语罢清宵半,泪雨零铃终不怨。 

    何如薄幸锦衣郎,比翼连枝当日愿。 

心里这么悲凉~

想起了同学在一起四年的生活,多少欢笑,

青春都抛洒在了那片土地,那是多么好的生活呀,

“清水般透明的生活啊” ,娜君如是说,呵呵~ 

毕业也有 2年了,工作也有两年多了,

自己感觉没什么大的长进,做事还是那么草率。[break]

--------------前面属于扯淡--------------------

记录一下今天的事情,以备后忘:

今天http://zhidao.uhoop.tom.com/  有个人来推广,

我原来写了一个过滤规则,没有想到推广的会钻这个空子,

呵呵,没办法,又得添加过滤规则,三下五除二,改完,交由运营测试,

没问题,上线,一气呵成,好像都那么顺利,

就回邮件说上线了

“  已经根据修改了过滤规则,

请查看~
 

 

美女考虑事情就是周到,马上在Skype说

[16:01:25] 刘**: 小祖宗,你咋不说因为这个人钻了漏洞产生的问题呀

[16:01:34] 刘**: 用的非常规手段呀

[16:01:44] 刘**: 你这么回信人家还以为你编程问题呢

大公司做事去,就是得万事巨细,要不然真是不好处理,

接着我的领导又补充了一下邮件:

 

“补充一下:今天这个用户用了非常规手段,没有按照正常途径编辑帖子内容,所以绕开了我们之前设定的过滤规则,针对该用户的这一种行为,我们已经添加了新的规则。但是不排除用户会想出其它的规则,如果发现请及时通知我们,我们再添加针对性的过滤。

另外,综合最近一段时间的广告情况,发现绝大多数都是 ********** 这个域名的广告链接(包括今天的广告),建议直接将其添加进禁词,请运营决定是否可行。”

领导不亏为领导,回邮件很标准,

——————————————

总结:做事情必须认认真真,不能急躁,我由于一时急躁,没表达清楚,

这样对自己不好,也不助于大家的理解,

做事情,要说明原因,处理的结果等,

呵呵,其实人生很简单,就是认真做事嘛

总结完毕~ 

 


smarteng 发布于 2010-6-2 08:08

博主

    blogger

    smarteng

    人生就流星,虽然转瞬即逝,但也有永恒。

日历

恰饭

标签