程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> mysql use db後很卡解決

mysql use db後很卡解決

編輯:MySQL綜合教程

mysql use db後很卡解決       平時自己使用的一台mysql,use db之後,總是感覺很卡,按完回車要快1s才能返回。覺得有什麼蹊跷,就打開了general log,發現簡單的use test,mysql實際執行了很多內容: Sql代碼   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。   Sql代碼   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內容即為表名);          因此在被use的schema下的表比較多的時候,自然會顯得有些卡了(連續use同樣的schema,則第二次use,則只會有COM_QUERY和COM_INIT_DB的過程), 為了避免use db後很卡,my.cnf裡加上 no-auto-rehash;或者用mysql client連接的時候加上-A選項。  

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved