未加星标

mysql优化之二(SQL语句优化)

字体大小 | |
[数据库(mysql) 所属分类 数据库(mysql) | 发布者 店小二05 | 时间 2016 | 作者 红领巾 ] 0人收藏点击收藏

(一)sql语句的类型

1.DQL(数据查询语言):select
2.DDL(数据定义语言):create、drop、alter
3.DML(数据操作语言):insert、delete、update
4.DCL(数据控制语言):grant、revoke
5.TCL(事务控制语言):rollback、savepoint、commit

(二)mysql优化的一般步骤

通过show status …命令查看各种sql执行频率 定位执行效率较低的语句(重点select慢查询) 通过explain分析低效率的sql语句的执行情况 确定问题并采取相应的优化措施

1.查看数据库当前状态,show参数,主要关注的是Com开头的指令

show status like 'Com_某某'; //某某所执行的次数
mysql> show status like 'Com%';//显示当前控制台的情况
+---------------------------+-------+
| Variable_name | Value |
+---------------------------+-------+
| Com_admin_commands | 0 |
| Com_assign_to_keycache | 0 |
| Com_alter_db | 0 |
| Com_alter_db_upgrade | 0 |
| Com_alter_event | 0 |
| Com_alter_function | 0 |
| Com_alter_procedure | 0 |
| Com_alter_server | 0 |
| Com_alter_table | 0 |
| Com_alter_tablespace | 0 |
| Com_analyze | 0 |
| Com_begin | 0 |
| Com_binlog | 0 |
| Com_call_procedure | 0 |
| Com_change_db | 0 |
| Com_change_master | 0 |
| Com_check | 0 |
| Com_checksum | 0 |
| Com_commit | 0 |
| Com_create_db | 0 |
| Com_create_event | 0 |
| Com_create_function | 0 |
| Com_create_index | 0 |
| Com_create_procedure | 0 |
| Com_create_server | 0 |
| Com_create_table | 0 |
| Com_create_trigger | 0 |
| Com_create_udf | 0 |
| Com_create_user | 0 |
| Com_create_view | 0 |
| Com_dealloc_sql | 0 |
| Com_delete | 0 | //显示删除所执行的次数
| Com_delete_multi | 0 |
| Com_do | 0 |
| Com_drop_db | 0 |
| Com_drop_event | 0 |
| Com_drop_function | 0 |
| Com_drop_index | 0 |
| Com_drop_procedure | 0 |
| Com_drop_server | 0 |
| Com_drop_table | 0 |
| Com_drop_trigger | 0 |
| Com_drop_user | 0 |
| Com_drop_view | 0 |
| Com_empty_query | 0 |
| Com_execute_sql | 0 |
| Com_flush | 0 |
| Com_grant | 0 |
| Com_ha_close | 0 |
| Com_ha_open | 0 |
| Com_ha_read | 0 |
| Com_help | 0 |
| Com_insert | 0 | //显示插入所执行的次数
| Com_insert_select | 0 |
| Com_install_plugin | 0 |
| Com_kill | 0 |
| Com_load | 0 |
| Com_lock_tables | 0 |
| Com_optimize | 0 |
| Com_preload_keys | 0 |
| Com_prepare_sql | 0 |
| Com_purge | 0 |
| Com_purge_before_date | 0 |
| Com_release_savepoint | 0 |
| Com_rename_table | 0 |
| Com_rename_user | 0 |
| Com_repair | 0 |
| Com_replace | 0 |
| Com_replace_select | 0 |
| Com_reset | 0 |
| Com_resignal | 0 |
| Com_revoke | 0 |
| Com_revoke_all | 0 |
| Com_rollback | 0 |
| Com_rollback_to_savepoint | 0 |
| Com_savepoint | 0 |
| Com_select | 1 | //显示查询所执行的次数
| Com_set_option | 0 |
| Com_signal | 0 |
| Com_show_authors | 0 |
| Com_show_binlog_events | 0 |
| Com_show_binlogs | 0 |
| Com_show_charsets | 0 |
| Com_show_collations | 0 |
| Com_show_contributors | 0 |
| Com_show_create_db | 0 |
| Com_show_create_event | 0 |
| Com_show_create_func | 0 |
| Com_show_create_proc | 0 |
| Com_show_create_table | 0 |
| Com_show_create_trigger | 0 |
| Com_show_databases | 0 |
| Com_show_engine_logs | 0 |
| Com_show_engine_mutex | 0 |
| Com_show_engine_status | 0 |
| Com_show_events | 0 |
| Com_show_errors | 0 |
| Com_show_fields | 0 |
| Com_show_function_status | 0 |
| Com_show_grants | 0 |
| Com_show_keys | 0 |
| Com_show_master_status | 0 |
| Com_show_open_tables | 0 |
| Com_show_plugins | 0 |
| Com_show_privileges | 0 |
| Com_show_procedure_status | 0 |
| Com_show_processlist | 0 |
| Com_show_profile | 0 |
| Com_show_profiles | 0 |
| Com_show_relaylog_events | 0 |
| Com_show_slave_hosts | 0 |
| Com_show_slave_status | 0 |
| Com_show_status | 1 |
| Com_show_storage_engines | 0 |
| Com_show_table_status | 0 |
| Com_show_tables | 0 |
| Com_show_triggers | 0 |
| Com_show_variables | 0 |
| Com_show_warnings | 0 |
| Com_slave_start | 0 |
| Com_slave_stop | 0 |
| Com_stmt_close | 0 |
| Com_stmt_execute | 0 |
| Com_stmt_fetch | 0 |
| Com_stmt_prepare | 0 |
| Com_stmt_reprepare | 0 |
| Com_stmt_reset | 0 |
| Com_stmt_send_long_data | 0 |
| Com_truncate | 0 |
| Com_uninstall_plugin | 0 |
| Com_unlock_tables | 0 |
| Com_update | 0 | //显示更新所执行的次数
| Com_update_multi | 0 |
| Com_xa_commit | 0 |
| Com_xa_end | 0 |
| Com_xa_prepare | 0 |
| Com_xa_recover | 0 |
| Com_xa_rollback | 0 |
| Com_xa_start | 0 |
| Compression | OFF |
+---------------------------+-------+
140 rows in set (0.00 sec)
mysql优化之二(SQL语句优化)

还有几个常用的命令

show status like 'Connections'; //链接mysql数据库的次数
show status like Uptime; //服务器工作的时间(单位秒)
show status like Slow_queries; //慢查询的次数(默认为10)

2.定位慢查询

默认情况下mysql不记录慢查询日志,要在启动的时候指定bin\mysqld.exe,slow-query-log 通过慢查询日志定位执行效率较低的sql语句。慢查询日志记录了所有查询时间超过long_query_time的sql 语句,show variables like 'long_query_time'; set long_query_time=时间;//设置慢查询时间 查看慢查询日志:默认为数据目录data中的host-name-slow.log。低版本的mysql需要通过在开启mysql时使用- -log-slow-queries[=file_name]来配置

3.explain分析问题

执行explain select * from emp where empno=10000;
mysql优化之二(SQL语句优化)
select_type //表示查询的类型
table //输出结果及集的表
type //表示表的连接类型
possible_keys //表示查询时可能用到的索引
key //表示实际使用的索引
key_len //索引字段的长度
rows //扫描的行数
Extra //执行情况的描述和说明

(三)建立适当的索引

建立索引可以极大地提高查询速度,但是查询速度的提高是以降低插入、更新、删除的速度为代价的,这些操作增加了大量的I/0以及增加了磁盘的占用。

1.索引的类型

主索引:主键自动地为主索引(PRIMARY) 唯一索引(UNIQUE) 普通索引(INDEX) 全文索引(FULLTEXT),只有MYISAM存储引擎支持,国内全文索引通常使用sphix

2.哪些列上适合添加索引

较为频繁的作为查询条件的字段应该创建索引 唯一性太差的字段不适合单独创建索引 更新非常频繁的字段不适合创建索引 不会出现在WHERE子句中字段不该创建索引 对于创建的多列索引,只要查询条件是用了最左边的列,索引一般就会被使用 对于使用like的查询,查询如果是’%aaa’,不会使用到索引;如果是’aaa%’会使用到索引 如果条件中有or,即使其中有条件带索引,也不会使用 如果列类型是字符串, 那一定要在条件中将数据使用引号引起来,否则不适用索引 如果条件中有or,即使其中有条件带索引,也不会使用
如果使用全表扫描比使用索引快,则不适用索引
3.索引的使用

创建索引

create [unique|fulltext] index index_name on tbl_name (col_name [(length)] [asc | desc] , …..);

本文数据库(mysql)相关术语:navicat for mysql mysql workbench mysql数据库 mysql 存储过程 mysql安装图解 mysql教程 mysql 管理工具

主题: SQL数据服务器定位FU删除RYTCLRIM数据库
分页:12
转载请注明
本文标题:mysql优化之二(SQL语句优化)
本站链接:http://www.codesec.net/view/480188.html
分享请点击:


1.凡CodeSecTeam转载的文章,均出自其它媒体或其他官网介绍,目的在于传递更多的信息,并不代表本站赞同其观点和其真实性负责;
2.转载的文章仅代表原创作者观点,与本站无关。其原创性以及文中陈述文字和内容未经本站证实,本站对该文以及其中全部或者部分内容、文字的真实性、完整性、及时性,不作出任何保证或承若;
3.如本站转载稿涉及版权等问题,请作者及时联系本站,我们会及时处理。
登录后可拥有收藏文章、关注作者等权限...
技术大类 技术大类 | 数据库(mysql) | 评论(0) | 阅读(82)