用了一个mysql,用了db之后总觉得卡,按回车键需要1s才能返回。我发现有些奇怪,于是打开通用日志,找到了一个简单的使用测试。mysql实际上执行了很多内容:
Sql代码
130603 16:02:11 2查询选择数据库()
2初始数据库测试
2查询显示数据库
2查询显示表
2字段列表b
2字段列表宝马
2字段列表http_auth
2字段列表性能_机器
2字段列表t
2字段列表t1
2字段列表t2
2字段列表t5
2字段列表t_max_col
2字段列表tb
2字段列表tbcsv
2字段列表tbmemory
2字段列表tbmyisam
2字段列表tc
2字段列表合计
2字段列表tt
而简单的show tables、show databases、select database()和show tables from test实际上只对应一个generallog。
Sql代码
130603 16:17:12 2查询显示表
130603 16:17:28 2查询显示数据库
130603 16:17:48 2查询选择数据库()
130603 16:19:44 3查询显示测试中的表
可以看到一个来自general log的使用测试,实际上是多次执行dispatch_command(),使用gdb为general_log_write()设置断点。实际执行如下:
COM_QUERY,对应的sql是SELECT DATABASE(),调用路径是:handle _ one _ connection(SQL _ connect . cc)-> do _ command(SQL _ parse . cc)-> dispatch _ command(SQL _ parse . cc,command = com _ query,packet = "select database。
COM_INIT_DB,调用路径为:handle _ one _ connection(SQL _ connect . cc)-> do _ command(SQL _ parse . cc)-> dispatch _ command(SQL _ parse . cc,command = com _ init _ db,packet = " test ");
COM_QUERY,对应的sql是show databases,调用路径是:handle _ one _ connection(SQL _ connect . cc)-> do _ command(SQL _ parse . cc)-> dispatch _ command(SQL _ parse . cc,command = com _ query,packet = "show databases。
COM_QUERY,对应的sql是show tables,调用路径是:handle _ one _ connection(SQL _ connect . cc)-> do _ command(SQL _ parse . cc)-> dispatch _ command(SQL _ parse . cc,command = com _ query,packet = "showtables "。
COM_FIELD_LIST,调用路径为:handle _ one _ connection(SQL _ connect . cc)-> do _ command(SQL _ parse . cc)-> dispatch _ command(SQL _ parse . cc,command = com _ field _ list,packet = "columns _ priv。这里调用n次(n是所用模式下的表数,每次pachet的内容是表名);
所以当使用的模式下有很多表的时候,自然会出现卡顿(如果连续使用同一个模式,那么第二次使用的时候,就只有COM_QUERY和COM_INIT_DB的进程了)。为了避免使用DB后卡死,my.cnf中加入了no-auto-rehash;或者在连接mysql客户端时添加-A选项。
bitsCN.com adminjs.cn是一个以CSS、JavaScript、Vue、HTML为核心的前端开发技术网站。我们致力于为广大前端开发者提供专业、全面、实用的前端开发知识和技术支持。 在本网站中,您可以学习到最新的前端开发技术,了解前端开发的最新趋势和最佳实践。我们提供丰富的教程和案例,让您可以快速掌握前端开发的核心技术和流程。 Adminjs.cn还提供一系列实用的工具和插件,帮助您更加高效地进行前端开发工作。我们提供的工具和插件都经过精心设计和优化,可以帮助您节省时间和精力,提升开发效率。 在Adminjs.cn中,您可以找到您需要的一切前端开发资源,让您成为一名更加优秀的前端开发者。欢迎您加入我们的大家庭,一起探索前端开发的无限可能!