千家信息网

16性能优化

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,16性能优化===============索引合理使用索引可以提高数据访问速度索引是否被合理使用可以使用show status或者mysqladmin扩展命来查看mysql> show status
千家信息网最后更新 2026年11月03日16性能优化


16性能优化

===============

索引

合理使用索引可以提高数据访问速度
索引是否被合理使用可以使用show status或者mysqladmin扩展命来查看

mysql> show status like 'handler_read%';
+-----------------------+-------+
| Variable_name | Value |
+-----------------------+-------+
| Handler_read_first | 0 |
| Handler_read_key | 0 |
| Handler_read_next | 0 |
| Handler_read_prev | 0 |
| Handler_read_rnd | 0 |
| Handler_read_rnd_next | 456 |
+-----------------------+-------+
6 rows in set (0.00 sec)

其中:
Handler_read_key这个值表示了一个行被索引读的次数,值高表示索引使用率较高
Handler_read_rnd_next这个值表示按照顺序读下一行的申请次数,值高表示查询效率偏低,需要创建合力的索引

表中索引被创建后,分析表可以减少碎片,提高访问效率
mysql> analyze table a,b;
+-------+---------+----------+----------+
| Table | Op | Msg_type | Msg_text |
+-------+---------+----------+----------+
| an.a | analyze | status | OK |
| an.b | analyze | status | OK |
+-------+---------+----------+----------+
2 rows in set (0.03 sec)

--------------

查询高速缓存

mysql> show variables like '%query_cache%';
+------------------------------+---------+
| Variable_name | Value |
+------------------------------+---------+
| have_query_cache | YES |
| query_cache_limit | 1048576 |
| query_cache_min_res_unit | 4096 |
| query_cache_size | 9437184 |
| query_cache_type | ON |
| query_cache_wlock_invalidate | OFF |
+------------------------------+---------+
6 rows in set (0.00 sec)

have_query_cache 是否设置了查询高速缓存
query_cache_size 表示分配的查询高速缓存的大小,为0则表示关闭了查询告诉缓存
query_cache_type 值范围为0到2,0或者off表示查询告诉缓存关闭,1表示查询告诉缓存已经打开,但使用sql_no_cache选项的select语句除外,2或者demand根据需要按照运行带sql_cache选项的select语句提供查询告诉缓存

查询中使用或者不是用查询告诉缓存可以在查询中是用关键字sql_cache,sql_no_cache来控制

mysql> select sql_cache * from a;
+----+------+
| id | name |
+----+------+
| 1 | ab |
| 2 | abc |
| 3 | abcd |
| 4 | ann |
+----+------+
4 rows in set (0.00 sec)

mysql> select sql_no_cache * from a;
+----+------+
| id | name |
+----+------+
| 1 | ab |
| 2 | abc |
| 3 | abcd |
| 4 | ann |
+----+------+
4 rows in set (0.00 sec)

----------------

分析查询

类似于oracle的查看执行计划

mysql> explain select * from a;
+----+-------------+-------+------+---------------+------+---------+------+------+-------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+------+---------------+------+---------+------+------+-------+
| 1 | SIMPLE | a | ALL | NULL | NULL | NULL | NULL | 4 | |
+----+-------------+-------+------+---------------+------+---------+------+------+-------+
1 row in set (0.00 sec)


mysql> explain select * from a where id=1 union select * from a;
+----+--------------+------------+-------+---------------+---------+---------+-------+------+-------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+--------------+------------+-------+---------------+---------+---------+-------+------+-------+
| 1 | PRIMARY | a | const | PRIMARY | PRIMARY | 4 | const | 1 | |
| 2 | UNION | a | ALL | NULL | NULL | NULL | NULL | 4 | |
|NULL | UNION RESULT | | ALL | NULL | NULL | NULL | NULL | NULL | |
+----+--------------+------------+-------+---------------+---------+---------+-------+------+-------+
3 rows in set (0.02 sec)

各个列的含义:
id 查询中色了传统的位置
table 查询的表名
select_type 查询类型,包括是否有子查询,union,外部查询,外部查询中的子查询等
type 连接的执行情况,const:连接的最佳种类,all:扫描所有数据后才得到结果
possible_keys 提高查询速度可以使用的索引
key 实际使用的键,包括在key_len列中显示的键长度
rows 查询到数据的长度
extra 其他信息,如mysql如何处理查询结果等信息

---------------

优化多表查询

mysql中连接效果比子查询好
避免使用嵌套
使用中间变量减少查询层次

----------------

使用临时表

使用临时表存放中间信息可以提高性能

-----------------

优化表设计

合理的字段选择,字段长度选择
optimize table

------------------

调整服务器设置

mysql优化调整首先想到的是调整key_buffer_size和table_cache

key_buffer_size mysql索引缓冲可以使用的内存量,一般建议使用武力内存的25%到30%
table_cache 表高速缓存使用的内存量,与其有关的参数还有max_connections
mysql建议table_cache=max_connections*n,n为标准连接中表的数量

mysql> select @@table_cache;
+---------------+
| @@table_cache |
+---------------+
| 700 |
+---------------+
1 row in set (0.00 sec)

mysql> show variables like '%table_cache%';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| table_cache | 700 |
+---------------+-------+
1 row in set (0.00 sec)

mysql> set global table_cache=1000;
Query OK, 0 rows affected (0.00 sec)

mysql> select @@table_cache;
+---------------+
| @@table_cache |
+---------------+
| 1000 |
+---------------+
1 row in set (0.00 sec)

这样设置重启数据库后设置将会恢复


其他的优化方法:
增加sort_buffer可以提高order by和group by语句的查询速度
增加read_rnd_buffer_size变量可以提高分类行的速度
增加read_buffer_size可以提高读缓存进而提高select效率
增加binlog_cache_size增加二进制日志缓存区,可以提高日志的处理速度
增加bulk_insert_buffer_size可以提高批量插入速度,但只能在myisam表中生效
增加thread_cache_size可以控制每个进程分配的内存量,如果连接很多的话可以做到更好的控制

--------------

基准技术
mysql benchmark suite
要求能够运行perl,包括perl dbi套件和mysql数据库驱动程序(dbd)
perl -e "use DBI"

查询 缓存 索引 速度 数据 内存 高速 信息 效率 语句 长度 控制 调整 性能 变量 字段 建议 数据库 日志 次数 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 广州万易互联网科技有限公司 互联网电商科技 互联网与科技金融数据 网络科技有限互联网 互联网公司 科技公司 恒生科技互联网指数分析 科技互联网的估值 北京大学互联网科技怎么样 互联网科技寓意 银川新华互联网科技职业技术培训学校图片 金融科技与互联网金融相同和不同 赶超互联网科技 微信多开 互联网科技创新的路径 中和天地互联网科技有限公司 梅州GM互联网络科技有限公司 上海互联网科技公司ppt 本届互联网大会上的黑科技 容联科技互联网电商 陕西彩京云互联网科技有限公司 科技发展第三阶段互联网时代 河南云网互联网络科技有限公司 远信互联网科技 互联网科技博客 丰台科技园 互联网公司 汽车互联网创新科技园 厦门比较好的科技互联网公司 互联网科技与大数据专业 互联网科技大奖都有哪些公司 科技赋能视角下互联网保险发展 互联网高科技绘画
0