上一页 1 ··· 3 4 5 6 7

2012年11月26日

外键建索引

摘要: oracle数据库中对外键使用索引。在oracle数据库中,当对父表(上面例子中的dep表)进行更新的时候,如果在子表(上面例子中的student表)中的外键没有使用索引,则在更新 的过程中整个子表将被锁定,而往往实际上并不需要锁定整个子表,而仅仅需要锁定子表中的几条记录。这样就会大大影响数据库访问的并发性,甚至有可能造成死 锁的情况。除了锁表的问题之外,一个没有使用索引的外键在下面两种情况下表现的也十分糟糕:当使用ON DELETE CASCADE删除父表中的记录时,如果在子表中的外键没有使用索引则当执行该操作时会对子表进行全表的扫描,而事实上这个全表的扫描是不需要的。更坏的情况是,如果删除 阅读全文

posted @ 2012-11-26 22:30 JohnChain 阅读(455) 评论(0) 推荐(0)

2012年11月18日

MySQL源代码分析:(1)Main函数

摘要: #/sql/Main.cc line 22 //main 函数 int main(int argc, char **argv) { return mysqld_main(argc, argv); } #/sql/mysqld.cc line 4808 int mysqld_main(int argc, char **argv) { /* Start as standalone server */ Service.my_argc=argc; Service.my_argv=argv; mysql_service(NULL); } #/sql/mysqld.cc line 4709 i... 阅读全文

posted @ 2012-11-18 11:34 JohnChain 阅读(1749) 评论(1) 推荐(0)

2012年11月12日

MySQL源代码解读(二)

摘要: 引言本文主要介绍Mysql主要的调用流程,将从代码的角度来看一个从用户发出的"select * from test" SQL命令在服务器内部是如何被执行的。从我个人的经验来看,阅读理解大规模项目的代码最重要的两个方面,一是了解主要的数据结构,二是了解数据流,在这里主要是调用流程。把这两个主线把握住以后,大部分代码都是比较容易阅读的,Mysql的源代码属于比较好读的类型,因为函数的调用关系比较明确。难读的代码一般都充斥着大量的回调、异步调用,很可能你极难找到某个函数在哪里或什么时候被调用了。当然,算法的实现代码也很难读。幸好Mysql不是那种难读的类型,所以我们也不要害怕,大 阅读全文

posted @ 2012-11-12 21:27 JohnChain 阅读(1424) 评论(0) 推荐(0)

MySQL源代码解读(一)

摘要: MySQL启动流程主要代码在sql/mysqld.cc中,精简后的代码如下:int main(int argc, char **argv) //标准入口函数MY_INIT(argv[0]);//调用mysys/My_init.c->my_init(),初始化mysql内部的系统库logger.init_base(); //初始化日志功能init_common_variables(MYSQL_CONFIG_NAME,argc, argv, load_default_groups) //调用load_defaults(conf_file_name, groups, &argc, &a 阅读全文

posted @ 2012-11-12 20:49 JohnChain 阅读(3032) 评论(0) 推荐(0)

mysql 运行概图

摘要: 接着进入Commander Dispatcher模块,命令分发模块,大概就是一个switch case的过程,根据不同的命令,进行不同的操作。这个模块又会间接关联到Query Cache模块和Logging Module,即查询缓存模块和日志模块。Query Cache模块个人感觉至少包含结果集缓存模块,至于有木有执行计划缓存,这个就不清楚了,还需要进入源码慢慢看来。Logging Module就是传说中的日志了,日志包括redo和undo两方面吧,日志系统是一个database必备的,是实现事务特性的重要手段,而事务便是 database和file system的根本区别,不要小瞧了Log. 阅读全文

posted @ 2012-11-12 20:31 JohnChain 阅读(336) 评论(0) 推荐(0)

Yacc 与 Lex

摘要: Ashish Bansal (abansal@ieee.org), 软件工程师, Sapient 公司简介:Lex 和 Yacc 是 UNIX 两个非常重要的、功能强大的工具。事实上,如果你熟练掌握 Lex 和 Yacc 的话,它们的强大功能使创建 FORTRAN 和 C 的编译器如同儿戏。Ashish Bansal 为您详细的讨论了编写自己的语言和编译器所用到的这两种工具,包括常规表达式、声明、匹配模式、变量、Yacc 语法和解析器代码。最后,他解释了怎样把 Lex 和 Yacc 结合起来。Lex 代表 Lexical Analyzar。Yacc 代表 Yet Another Compile 阅读全文

posted @ 2012-11-12 15:13 JohnChain 阅读(265) 评论(0) 推荐(0)

2012年11月11日

提高SQL查询效率

摘要: 1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如: select id from t where num is null 可以在num上设置默认值0,确保表中num列没有null值,然后这样查询: select id from t where num=0 3.应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描。 4.应尽量避免在 where 子句中使用 or 来连接条件,否 阅读全文

posted @ 2012-11-11 08:16 JohnChain 阅读(175) 评论(0) 推荐(0)

2012年11月8日

C语言中如何对串口进行操作

摘要: 1 串口是一种时常用来与外界通信的一种设备,虽然现在网络已经很普及,但由于PC机时常需要通过MODEM与远距离主机或是与单片机设备进行通信所以串口的用途还是很广泛。 2 串口在Win32的开发中可以以文件的形式来进行打开和关闭,并且串口的读写也可以利用ReadFile和WriteFile来进行操作。以前在Windows 3.X下的OpenComm等部分串口操作函数已经被废弃。 3 串口的开打可以使用下面的方法: 4 HANDLE hDev = CreateFile( "COM1", 指明串口名称,COM1代表第一个串口,COM2代表第二个串口 5 GENE... 阅读全文

posted @ 2012-11-08 10:59 JohnChain 阅读(5769) 评论(0) 推荐(0)

2012年11月6日

MySQL源码结构

摘要: BUILD这个目录在本系列的上篇文章中我们仔细看过,内含各种平台的编译脚本,这里就不仔细说了。client这个目录下有如下比较让人眼熟的文件: mysql.cc, mysqlcheck.c, mysqladmin.cc, mysqlshow.c,等等,如果你编译一下就会发现那些眼熟的程序也出现了,比如mysql。明白了吧,这个目录就是那些客户端程序所在的目录。这个目录的内容也比较少,而且也不是我们阅读的重点。 storage这个目录包含了所谓的Mysql存储引擎 (storage engine)。存储引擎是数据库系统的核心,封装了数据库文件的操作,是数据库系统是否强大最重要的因素。Mysql实 阅读全文

posted @ 2012-11-06 20:32 JohnChain 阅读(839) 评论(0) 推荐(0)

上一页 1 ··· 3 4 5 6 7

导航

点击右上角即可分享
微信分享提示