`

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

 

分享到:
评论

相关推荐

    Oracle,DB2,mysql的驱动以及用Java连接数据库的方法

    具体配置取决于数据库类型,一般在连接URL中加入相关参数,如MySQL的`useSSL=true`。 7. 数据库优化: Java连接数据库时,可以通过设置超时、缓冲大小、批处理等参数优化性能。同时,合理设计SQL语句,避免全表扫描...

    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

    mybatis连接MySQL8出现的问题解决方法

    在使用MyBatis连接MySQL8时,执行到数据库查询前均正常,但进行查询时,便卡主没有反应了。设置了日志、try catch等也不报错,页面就在那一直转。之前MyBatis自动生成的代码都是正常的,但是在测试类中使用...

    DB MySQL Connector/C x64 v6.1 便携版

    对于查询语句,可以使用`mysql_store_result()`或`mysql_use_result()`来处理结果集。 3. 结果集处理:`mysql_fetch_row()`用于从结果集中获取一行数据,`mysql_num_rows()`用于获取结果集中的行数,而`mysql_field...

    MySQL Example DB world-db.zip

    4. **选择数据库**:创建数据库后,使用`USE world_db;`切换到该数据库。 5. **表结构**:"world-db"数据库很可能包含了多个国家、城市、人口等相关信息的表格,例如"countries"、"cities"等。每个表都有其特定的列...

    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 文件即可

    jsp连接SQLServer,mysql,db2数据库.pdf

    useSSL=false&serverTimezone=UTC`,其中`useSSL=false`和`serverTimezone=UTC`是常见的参数,可以根据实际需求调整。 - 其余步骤与SQLServer类似,只是驱动和连接字符串不同。 4. **JSP连接DB2** - DB2的JDBC...

    Linux安装Mysql5.6教程(手把手教你)

    ./scripts/mysql_install_db --user=mysql ``` ##### 7. 调整目录权限 为了让MySQL能够正常启动,还需要对目录权限做进一步调整: ```bash chown -R root:root . chown -R mysql:mysql data ``` ##### 8. 将MySQL...

    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 从一个 ...

    mysql5.5.9 安装文档

    mysql> use mysql; ``` **3. 显示数据库中的表:** ```sql mysql> show tables; ``` **4. 查看表结构:** ```sql mysql> describe table_name; ``` **5. 创建数据库:** ```sql mysql> create database db_name; ...

    delphi mysql.dll 连接mysql数据库

    标题 "Delphi MySQL.dll 连接MySQL数据库" 涉及到的是在Delphi编程环境中,使用MySQL数据库的客户端库(通常为mysql.dll)来建立连接,而不是通过OLE DB(Object Linking and Embedding, Database)接口。OLE DB是...

    MySQL入门很简单

    - 使用:`USE db_name;`切换到指定数据库。 - 删除:`DROP DATABASE IF EXISTS db_name;`删除数据库。 5. 表的操作: - 创建:`CREATE TABLE table_name (column1 type, column2 type);` - 插入:`INSERT INTO ...

    Laravel开发-dynamic-mysql-db-backup

    标题“Laravel开发-dynamic-mysql-db-backup”表明我们要讨论的是一个 Laravel 开发项目,该项目专注于数据库备份功能,特别是针对 MySQL 数据库。描述提到“动态保存MySQL转储到您的特定存储”,这暗示我们将学习...

    mysql安装(tar包方式)

    ./scripts/mysql_install_db --user=mysql --datadir=/usr/local/mysql/data/mysql ``` 安装完成后,将mysql.server脚本复制到/etc/init.d目录下,并修改其权限为755,确保root用户可以执行: ```bash cp support-...

Global site tag (gtag.js) - Google Analytics