使用LEFT JOIN时,Mysql查询长时间处于’SENDING DATA’状态

前端之家收集整理的这篇文章主要介绍了使用LEFT JOIN时,Mysql查询长时间处于’SENDING DATA’状态前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有很长一段时间处于SENDING DATA状态的查询.
有人可以帮我这个:下面是详细信息

MySQL查询

  1. select a.msgId,a.senderId,a.destination,a.inTime,a.status as InStatus,b.status as SubStatus,c.deliverTime,substr(c.receipt,82,7) as DlvStatus
  2. from inserted_history a left join submitted_history b on b.msgId = a.msgId left join delivered_history c on a.msgId = c.msgId
  3. where a.inTime between '2010-08-10 00:00:00' and '2010-08-010 23:59:59' and a.systemId='ND_arber'

deliver_history中的总记录:223870168

inserted_history中的总记录:264817239

submitted_history中的总记录:226637058

解释查询返回:

  1. id,select_type,table,type,possible_keys,key,key_len,ref,rows,Extra
  2. 1,SIMPLE,a,systemId,idx_time,14,const,735310,Using where
  3. 1,b,PRIMARY,66,gwreports2.a.msgId,2270405,1,c,2238701,

为deliver_history创建表

  1. CREATE TABLE `delivered_history` (
  2. `msgId` VARCHAR(64) NOT NULL,`systemId` VARCHAR(12) NOT NULL,`deliverTime` TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00',`smscId` VARCHAR(64) NOT NULL,`smsc` VARCHAR(20) NOT NULL,`receipt` BLOB NULL,`errcode` INT(11) NULL DEFAULT NULL,PRIMARY KEY (`msgId`,`deliverTime`),INDEX `systemId` (`systemId`),INDEX `smsc` (`smsc`),INDEX `idx_time` (`deliverTime`)
  3. )
  4. ROW_FORMAT=DEFAULT

为inserted_history创建表

  1. CREATE TABLE `inserted_history` (
  2. `msgId` VARCHAR(64) NOT NULL,`senderId` VARCHAR(15) NOT NULL,`destination` VARCHAR(15) NOT NULL,`inTime` TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00',`status` VARCHAR(20) NOT NULL,`msgText` BLOB NULL,`msgType` VARCHAR(15) NULL DEFAULT NULL,`inTime`),INDEX `senderId` (`senderId`),INDEX `destination` (`destination`),INDEX `status` (`status`),INDEX `idx_time` (`inTime`)
  3. )
  4. ROW_FORMAT=DEFAULT

为submitted_history创建表

  1. CREATE TABLE `submitted_history` (
  2. `msgId` VARCHAR(64) NOT NULL,`submitTime` TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00',`smsc` VARCHAR(16) NOT NULL,`errcode` INT(6) NULL DEFAULT '0',`submitTime`),INDEX `idx_time` (`submitTime`)
  3. )
  4. ROW_FORMAT=DEFAULT

所有表都在时间戳字段上进行日期分区

MysqL Server中的全局变量列表

  1. Variable_name,Value
  2. auto_increment_increment,1
  3. auto_increment_offset,1
  4. autocommit,ON
  5. automatic_sp_privileges,ON
  6. back_log,50
  7. basedir,/usr/
  8. big_tables,OFF
  9. binlog_cache_size,32768
  10. binlog_format,STATEMENT
  11. bulk_insert_buffer_size,8388608
  12. character_set_client,latin1
  13. character_set_connection,latin1
  14. character_set_database,latin1
  15. character_set_filesystem,binary
  16. character_set_results,latin1
  17. character_set_server,latin1
  18. character_set_system,utf8
  19. character_sets_dir,/usr/share/MysqL/charsets/
  20. collation_connection,latin1_swedish_ci
  21. collation_database,latin1_swedish_ci
  22. collation_server,latin1_swedish_ci
  23. completion_type,0
  24. concurrent_insert,1
  25. connect_timeout,10
  26. datadir,/var/lib/MysqL/
  27. date_format,%Y-%m-%d
  28. datetime_format,%Y-%m-%d %H:%i:%s
  29. default_week_format,0
  30. delay_key_write,ON
  31. delayed_insert_limit,100
  32. delayed_insert_timeout,300
  33. delayed_queue_size,1000
  34. div_precision_increment,4
  35. engine_condition_pushdown,ON
  36. error_count,0
  37. event_scheduler,OFF
  38. expire_logs_days,10
  39. flush,OFF
  40. flush_time,0
  41. foreign_key_checks,ON
  42. ft_boolean_Syntax,+ -><()~*: &|
  43. ft_max_word_len,84
  44. ft_min_word_len,4
  45. ft_query_expansion_limit,20
  46. ft_stopword_file,(built-in)
  47. general_log,OFF
  48. general_log_file,/var/run/MysqLd/MysqLd.log
  49. group_concat_max_len,1024
  50. have_community_features,YES
  51. have_compress,YES
  52. have_crypt,YES
  53. have_csv,YES
  54. have_dynamic_loading,YES
  55. have_geometry,YES
  56. have_innodb,YES
  57. have_ndbcluster,NO
  58. have_openssl,DISABLED
  59. have_partitioning,YES
  60. have_query_cache,YES
  61. have_rtree_keys,YES
  62. have_ssl,DISABLED
  63. have_symlink,YES
  64. hostname,smscdb
  65. identity,0
  66. ignore_builtin_innodb,OFF
  67. init_connect,init_file,init_slave,innodb_adaptive_hash_index,ON
  68. innodb_additional_mem_pool_size,1048576
  69. innodb_autoextend_increment,8
  70. innodb_autoinc_lock_mode,1
  71. innodb_buffer_pool_size,8388608
  72. innodb_checksums,ON
  73. innodb_commit_concurrency,0
  74. innodb_concurrency_tickets,500
  75. innodb_data_file_path,ibdata1:10M:autoextend
  76. innodb_data_home_dir,innodb_doublewrite,ON
  77. innodb_fast_shutdown,1
  78. innodb_file_io_threads,4
  79. innodb_file_per_table,OFF
  80. innodb_flush_log_at_trx_commit,1
  81. innodb_flush_method,innodb_force_recovery,0
  82. innodb_lock_wait_timeout,50
  83. innodb_locks_unsafe_for_binlog,OFF
  84. innodb_log_buffer_size,1048576
  85. innodb_log_file_size,5242880
  86. innodb_log_files_in_group,2
  87. innodb_log_group_home_dir,./
  88. innodb_max_dirty_pages_pct,90
  89. innodb_max_purge_lag,0
  90. innodb_mirrored_log_groups,1
  91. innodb_open_files,300
  92. innodb_rollback_on_timeout,OFF
  93. innodb_stats_on_Metadata,ON
  94. innodb_support_xa,ON
  95. innodb_sync_spin_loops,20
  96. innodb_table_locks,ON
  97. innodb_thread_concurrency,8
  98. innodb_thread_sleep_delay,10000
  99. innodb_use_legacy_cardinality_algorithm,ON
  100. insert_id,0
  101. interactive_timeout,28800
  102. join_buffer_size,131072
  103. keep_files_on_create,OFF
  104. key_buffer_size,1073741824
  105. key_cache_age_threshold,300
  106. key_cache_block_size,1024
  107. key_cache_division_limit,100
  108. language,/usr/share/MysqL/english/
  109. large_files_support,ON
  110. large_page_size,0
  111. large_pages,OFF
  112. last_insert_id,0
  113. lc_time_names,en_US
  114. license,GPL
  115. local_infile,ON
  116. locked_in_memory,OFF
  117. log,OFF
  118. log_bin,ON
  119. log_bin_trust_function_creators,OFF
  120. log_bin_trust_routine_creators,OFF
  121. log_error,log_output,FILE
  122. log_queries_not_using_indexes,OFF
  123. log_slave_updates,OFF
  124. log_slow_queries,OFF
  125. log_warnings,1
  126. long_query_time,10.000000
  127. low_priority_updates,OFF
  128. lower_case_file_system,OFF
  129. lower_case_table_names,0
  130. max_allowed_packet,536870912
  131. max_binlog_cache_size,4294963200
  132. max_binlog_size,104857600
  133. max_connect_errors,10
  134. max_connections,151
  135. max_delayed_threads,20
  136. max_error_count,64
  137. max_heap_table_size,16777216
  138. max_insert_delayed_threads,20
  139. max_join_size,18446744073709551615
  140. max_length_for_sort_data,1024
  141. max_prepared_stmt_count,16382
  142. max_relay_log_size,0
  143. max_seeks_for_key,4294967295
  144. max_sort_length,1024
  145. max_sp_recursion_depth,0
  146. max_tmp_tables,32
  147. max_user_connections,0
  148. max_write_lock_count,4294967295
  149. min_examined_row_limit,0
  150. multi_range_count,256
  151. myisam_data_pointer_size,6
  152. myisam_max_sort_file_size,2146435072
  153. myisam_recover_options,BACKUP
  154. myisam_repair_threads,1
  155. myisam_sort_buffer_size,8388608
  156. myisam_stats_method,nulls_unequal
  157. myisam_use_mmap,OFF
  158. net_buffer_length,16384
  159. net_read_timeout,30
  160. net_retry_count,10
  161. net_write_timeout,60
  162. new,OFF
  163. old,OFF
  164. old_alter_table,OFF
  165. old_passwords,OFF
  166. open_files_limit,20000
  167. optimizer_prune_level,1
  168. optimizer_search_depth,62
  169. optimizer_switch,index_merge=on,index_merge_union=on,index_merge_sort_union=on,index_merge_intersection=on
  170. pid_file,/var/run/MysqLd/MysqLd.pid
  171. plugin_dir,/usr/lib/MysqL/plugin
  172. port,3306
  173. preload_buffer_size,32768
  174. profiling,OFF
  175. profiling_history_size,15
  176. protocol_version,10
  177. pseudo_thread_id,0
  178. query_alloc_block_size,8192
  179. query_cache_limit,1073741824
  180. query_cache_min_res_unit,4096
  181. query_cache_size,536870912
  182. query_cache_type,ON
  183. query_cache_wlock_invalidate,OFF
  184. query_prealloc_size,8192
  185. rand_seed1,rand_seed2,range_alloc_block_size,4096
  186. read_buffer_size,131072
  187. read_only,OFF
  188. read_rnd_buffer_size,33554432
  189. relay_log,relay_log_index,relay_log_info_file,relay-log.info
  190. relay_log_purge,ON
  191. relay_log_space_limit,0
  192. report_host,report_password,report_port,3306
  193. report_user,rpl_recovery_rank,0
  194. secure_auth,OFF
  195. secure_file_priv,server_id,3
  196. skip_external_locking,ON
  197. skip_networking,OFF
  198. skip_show_database,OFF
  199. slave_compressed_protocol,OFF
  200. slave_exec_mode,STRICT
  201. slave_load_tmpdir,/tmp
  202. slave_net_timeout,3600
  203. slave_skip_errors,OFF
  204. slave_transaction_retries,10
  205. slow_launch_time,2
  206. slow_query_log,OFF
  207. slow_query_log_file,/var/run/MysqLd/MysqLd-slow.log
  208. socket,/var/run/MysqLd/MysqLd.sock
  209. sort_buffer_size,67108864
  210. sql_auto_is_null,ON
  211. sql_big_selects,ON
  212. sql_big_tables,OFF
  213. sql_buffer_result,OFF
  214. sql_log_bin,ON
  215. sql_log_off,OFF
  216. sql_log_update,ON
  217. sql_low_priority_updates,OFF
  218. sql_max_join_size,18446744073709551615
  219. sql_mode,sql_notes,ON
  220. sql_quote_show_create,ON
  221. sql_safe_updates,OFF
  222. sql_select_limit,18446744073709551615
  223. sql_slave_skip_counter,sql_warnings,OFF
  224. ssl_ca,ssl_capath,ssl_cert,ssl_cipher,ssl_key,storage_engine,MyISAM
  225. sync_binlog,0
  226. sync_frm,ON
  227. system_time_zone,IST
  228. table_definition_cache,256
  229. table_lock_wait_timeout,50
  230. table_open_cache,500
  231. table_type,MyISAM
  232. thread_cache_size,8
  233. thread_handling,one-thread-per-connection
  234. thread_stack,196608
  235. time_format,%H:%i:%s
  236. time_zone,SYSTEM
  237. timed_mutexes,OFF
  238. timestamp,1282125419
  239. tmp_table_size,16777216
  240. tmpdir,/tmp
  241. transaction_alloc_block_size,8192
  242. transaction_prealloc_size,4096
  243. tx_isolation,REPEATABLE-READ
  244. unique_checks,ON
  245. updatable_views_with_limit,YES
  246. version,5.1.37-1ubuntu5-log
  247. version_comment,(Ubuntu)
  248. version_compile_machine,i486
  249. version_compile_os,debian-linux-gnu
  250. wait_timeout,28800
  251. warning_count,0

解决方法

你给出的解释计划:
  1. id,Extra
  2. 1,systemId idx_time),Using where
  3. 1,

显示你正在击中:735310 * 2270405 * 2238701 = 3T行!!!!!!
实际上,您没有充分利用索引.

如何解释你的“解释计划”:
对于表’a'(735310)中的每一行,您按表’b’2270405次.
对于您在表’b’中点击的每一行,您点击表’c’2238701次.
如您所见,这是一个指数问题.

是的,8MB的InnoDb缓冲区空间很小,但是将解释计划降低到xxxx * 1 * 1将导致令人难以置信的速度,即使是8MB的缓冲空间.

鉴于您的查询

  1. SELECT a.msgId,7) as DlvStatus
  2. FROM inserted_history a
  3. LEFT JOIN submitted_history b ON b.msgId = a.msgId -- USES 1 column of PK
  4. LEFT JOIN delivered_history c ON a.msgId = c.msgId -- USES 1 column of PK
  5. WHERE a.inTime BETWEEN '2010-08-10 00:00:00' AND '2010-08-010 23:59:59' -- NO key
  6. AND a.systemId='ND_arber' -- Uses non-unique PK

以下是我看到的问题:
A)您的_history表在具有’Timestamp’数据类型的列上进行分区,YET您不是JOIN / WHERE条件中的那些列.没有这些信息,引擎必须命中每个分区.
B)对submitted_history和delivered_history的访问仅使用2列PK的1列.你只是获得PK的部分利益.你能获得更多列成为JOIN的一部分吗?您必须为此表找到的行数尽可能接近“1”.
C)msgID = varchar(64),这是每个表的PK的第1列.每张桌子上的钥匙都是**巨大** !!
– 尝试减小PK的列大小,或使用不同的列.

您的其他键的数据模式显示您在非PK键中占用了大量磁盘/ RAM空间.

问题1)每个表的“显示索引FROM”(Link)报告的内容是什么? “基数”一栏将向您展示每个密钥的真实效果.基数越小,该指数的最低/更低效.您希望基数尽可能接近“总行数”以获得理想的性能.

问题2)您是否可以重新考虑sql,使每个表的JOIN’d列是该表的基数最高的那些?

问题3)’timestamp’数据类型的列真的是分区的最佳列吗?如果您的访问模式总是使用’​​msgId’,并且msgId是PK的第1列,那么.

问题4)msgId是唯一的吗?我的猜测是肯定的,PK的第二列并不是必需的.

阅读优化sql(Link)并获得表的索引基数报告.这是了解如何优化查询的途径.您希望解释计划的“行”为N * 1 * 1.

侧面注意:InnoDb& MyISAM引擎不会自动更新非唯一列的表基数,DBA需要定期手动运行“分析表”以确保其准确性.

祝好运.

猜你在找的MsSQL相关文章