`

mysql use db 后很卡

阅读更多

    平时自己使用的一台mysql,use db之后,总是感觉很卡,按完回车要快1s才能返回。觉得有什么蹊跷,就打开了general log,发现简单的use test,mysql实际执行了很多内容:

130603 16:02:11     2 Query     SELECT DATABASE()
                    2 Init DB   test
                    2 Query     show databases
                    2 Query     show tables
                    2 Field List        b 
                    2 Field List        bmw
                    2 Field List        http_auth 
                    2 Field List        perf_machine 
                    2 Field List        t 
                    2 Field List        t1 
                    2 Field List        t2 
                    2 Field List        t5 
                    2 Field List        t_max_col 
                    2 Field List        tb 
                    2 Field List        tbcsv 
                    2 Field List        tbmemory 
                    2 Field List        tbmyisam 
                    2 Field List        tc 
                    2 Field List        total 
                    2 Field List        tt 

   而简单的show tables,show databases, select database(),show tables from test,实际都只对应一条generallog。

 

130603 16:17:12     2 Query     show tables

130603 16:17:28     2 Query     show databases

130603 16:17:48     2 Query     SELECT DATABASE()

130603 16:19:44     3 Query     show tables from test

     从general log可以看到 一条use test,实际执行了多次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="show tables");

     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为被use的schema下的表的个数,每次调用的时候,pachet内容即为表名);

     auto-rehash有什么作用呢?简言之就是,自动补全,当你输入schema/table的前面几个字符后,按tab键,mysql会做提示你可能的输入。

       因此在被use的schema下的表比较多的时候,自然会显得有些卡了(连续use同样的schema,则第二次use,则只会有COM_QUERY和COM_INIT_DB的过程), 为了避免use db后很卡,my.cnf里加上 no-auto-rehash;或者用mysql client连接的时候加上-A选项。

 

参考链接:

http://dev.mysql.com/doc/refman/5.1/en/mysql-command-options.html#option_mysql_auto-rehash

 

分享到:
评论

相关推荐

    Mysql解决USE DB堵塞详解

    通过实例给大家分析了在MYSQL中出现USE DB堵塞的处理办法以及思考思路,有兴趣的朋友学习下吧。

    MySQL面试题附答案根据我的面试经验整理

    use 语句可以通告MySQL把 db_name 数据库作为默认(当前)数据库使用,用于后续语句。该数据库保持为默认数据库,直到语段的结尾,或者直到发布一个不同的 USE 语句: mysql> USE db1; mysql> SELECT COUNT(*) FROM...

    php form generator mysql db backend

    php mysql html form generator using this script you can generate html form for your website and it gives out php script and mysql db schema for you to use with out any coding knowledge

    MYSQL常用语句很容易看懂初学者最为合适

    选择数据库 mysql->use db 创建表 mysql->create table mytable(name varchar(20),sex(char(1),birth date); 删除表 mysql->drop table mytable; 显示表的内容 mysql->show tables; 显示表的结构 mysql->describe ...

    MYSQL

    4.13 OS/2 注意事项 4.14 TcX 二进制代码 4.15 安装后期(post-installation)的设置与测试 4.15.1 运行mysql_install_db 的问题 4.15.2 启动 MySQL 服务器的问题 4.15.3 自动启动和停止 ...

    MySQL中文参考手册.chm

    4.13 OS/2 注意事项 4.14 TcX 二进制代码 4.15 安装后期(post-installation)的设置与测试 4.15.1 运行mysql_install_db 的问题 4.15.2 启动 MySQL 服务器的问题 4.15.3 自动启动和停止...

    jsp+mysql简单留言板实现

    源码说明: 采用纯jsp页面+Mysql的方法实现功能 项目编码是gb2312,要转换格式的请自己... use db_jsp;把文件内容复制粘贴到命令行即可 使用方法一: 在mysql中新建一个名为db_jsp的数据库;导入db_jsp.sql 文件即可

    MySQL中文参考手册

    + 4.15.1 运行mysql_install_db 的问题 + 4.15.2 启动 MySQL 服务器的问题 + 4.15.3 自动启动和停止 MySQL + 4.15.4 选项文件 o 4.16 升级和降级(downgrading)时有什么特别要做的事情吗? + 4.16.1 从一个 ...

    最全Mysql数据库命令

    mysql>use 数据库 然后使用source命令,后面参数为脚本文件(如这里用到的.sql) mysql>source wcnc_db.sql B:使用mysqldump命令 mysqldump -u username -p dbname C:使用mysql命令 mysql -u username -p -D dbname ...

    Mysql数据库设计.pdf

    resource mysql_query(SQL语句) resource mysql_db_query(tablename[,]); array mysql_fetch_row(); array mysql_fetch_array(); MYSQL_ASSOC: MYSQL_NUM: MYSQL_BOTH: mysql_num_fields(); 取得结果集中字段的数⽬...

    oracle和mysql的区别

    使用ORACLE和MYSQL的简单区别 归纳下我遇到最常见的问题。 1.在ORACLE中用select * from all_users显示所有的用户,而在MYSQL中显示所有数据库的命令是show databases。对于我的理解,ORACLE项目来说一个项目就应该...

    Devart dbForge Studio for MySQL Professional Edition v7.1.13

    Use database diagram for creating, analyzing, reverse-engineering, printing and customizing your MySQL databases and for: Viewing foreign key relations Displaying DB objects with properties Execution...

    MySQL 5.1中文手冊

    13.3.2. USE语法 13.4. MySQL事务处理和锁定语句 13.4.1. START TRANSACTION, COMMIT和ROLLBACK语法 13.4.2. 不能回滚的语句 13.4.3. 会造成隐式提交的语句 13.4.4. SAVEPOINT和ROLLBACK TO SAVEPOINT语法 13.4.5. ...

    Mysql 作业文本.rar

    从init.sql文件中导入数据 ...mysql> use db1; (进入表) mysql> source /root/init.sql 导入文件(输入source 然后直接将文件拉入cmd端口就可以了) 实在不行请直接复制文本内容在进入表以后粘贴上去; 有问题请留言.

    MySQL 5.1官方简体中文参考手册

    1.7.3. MySQL论坛上的MySQL社区支持 1.8. MySQL标准的兼容性 1.8.1. MySQL遵从的标准是什么 1.8.2. 选择SQL模式 1.8.3. 在ANSI模式下运行MySQL 1.8.4. MySQL对标准SQL的扩展 1.8.5. MySQL与标准SQL的差别 1.8.6. ...

    MySQL 5.1参考手册

    MySQL 5.1参考手册.chm 前言 1. 一般信息 1.1. 关于本手册 1.2. 本手册采用的惯例 1.3. MySQL AB概述 1.4. MySQL数据库管理系统概述 1.4.1. MySQL的历史 1.4.2. MySQL的的主要特性 1.4.3. MySQL稳定性 1.4.4. MySQL...

    mysql5.1中文手册

    MySQL论坛上的MySQL社区支持 1.8. MySQL标准的兼容性 1.8.1. MySQL遵从的标准是什么 1.8.2. 选择SQL模式 1.8.3. 在ANSI模式下运行MySQL 1.8.4. MySQL对标准SQL的扩展 1.8.5. MySQL与标准SQL的...

    MySQL 8 for Big Data-Packt Publishing(2017).pdf

    In this book, you will see how Database Administrators (DAs) can use MySQL to handle billions of records and load and retrieve data with performance comparable or superior to commercial DB solutions ...

Global site tag (gtag.js) - Google Analytics