如何进行MySQL管理基础中的性能优化

技术如何进行MySQL管理基础中的性能优化如何进行MySQL管理基础中的性能优化,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。1.索引应该添加索引

如何优化MySQL管理基础的性能,针对这个问题,本文详细介绍了相应的分析和解答,希望能帮助更多想要解决这个问题的小伙伴找到更简单更容易的方法。

1.索引

1应编制索引的列包括:用于联接的列,以及WHERE、GROUP BY或ORDER BY子句中涉及的列。

2具有许多重复值的列不能通过建立索引来提高性能,而具有唯一值的列可以充分受益于索引。

3索引越多越方便。它可能会提高搜索速度,并减缓写操作,如插入、删除和更新。非常小的表不需要编制索引。

一些服务器状态变量的值可以反映索引的状态或为添加索引提供参考,例如:

Handler_read_key:按索引读取行的请求数。低值表示索引不经常使用。

Handler_read_rnd_next:读取数据文件中下一行的请求数。较高的值表示存在大量的全表扫描,这表明表没有被正确索引或者查询没有利用索引。

您可以使用mysqladmin扩展状态或SHOW STATUS命令查看状态变量,例如:

mysql显示像“Handler_read_%”这样的状态;

- -

|变量名|值|

- -

| Handler_read_first | 0 |

| Handler_read_key | 0 |

| Handler_read_next | 0 |

| Handler_read_prev | 0 |

| Handler_read_rnd | 0 |

| Handler_read_rnd_next | 0 |

- -

6行一组(0.00秒)

[@more@]对于索引表,应该定期执行ANALYZE TABLE命令。该命令分析并存储表的密钥分布。MySQL使用存储的密钥分布来确定连接时表的连接顺序以及查询时使用哪些索引。

2 .查询缓存

检查相关的服务器系统变量,并确认查询缓存已打开:

mysql显示像“%query_cache%”这样的变量;

- -

|变量名|值|

- -

|有_query_cache |是|

| query_cache_limit | 1048576

| query _ cache _ min _ RES _ unit | 4096 |

| query_cache_size | 15728640 |

| query_cache_type | ON |

| query _ cache _ wlock _ invalidate | OFF |

- -

6行一组(0.00秒)

have _ query _ cache:MySQL服务器是否支持查询缓存。

查询_c

ache_size:分配给query cache的内存总量。
   query_cache_type:query cache的类型。0或OFF表示不使用query cache,但系统还是会为query cache分配内存空间;1或ON表示缓存所有查询结果,但以SELECT SQL_NO_CACHE开头的除外;2或DEMAND表示只缓存以SQL_CACHE开头的语句。

   一旦表发生变化,query cache中涉及该表的缓存内容就会失效,所以经常变化的表并不能从query cache的使用中受益,可以考虑为这些查询添加SQL_NO_CACHE选项。

3.查询分析

   在查询语句最前面添加EXPLAIN关键字,返回的结果将列出该语句中所有的SELECT。例如:

mysql> explain select a.username, b.nickname, a.email from members a, memberfields b where a.uid = b.uid and a.email lik
e "%163.com";
+----+-------------+-------+--------+---------------+---------+---------+-------------+-------+-------------+
| id | select_type | table | type   | possible_keys | key     | key_len | ref         | rows  | Extra       |
+----+-------------+-------+--------+---------------+---------+---------+-------------+-------+-------------+
|  1 | SIMPLE      | b     | ALL    | PRIMARY       | NULL    | NULL    | NULL        | 46237 |             |
|  1 | SIMPLE      | a     | eq_ref | PRIMARY       | PRIMARY | 3       | test2.b.uid |     1 | Using where |
+----+-------------+-------+--------+---------------+---------+---------+-------------+-------+-------------+
2 rows in set (0.00 sec)

   id列为SELECT在整个查询中的位置;select_type列为查询的类型,如简单查询、UNION中最后面的查询、子查询等等;type列为执行连接的情况,const最佳,ALL最差;possible_keys列为可能使用的索引;key列为实际使用的索引;rows列为执行该查询需要在相应表中检索的行的数量,将每条记录中的数字相乘即为该查询的总开销;Extra列为一些其它相关信息。

4.优化多表查询

(1) 子查询转连接

   例如:

select email from cdb_members where uid = (select uid from cdb_memberfields where nickname = 'aquxyz');

   可转化为:

select email from cdb_members c_m, cdb_memberfields c_mf where c_m.uid = c_mf.uid and nickname = 'aquxyz';

(2) 巧妙利用对结果集的限制

   例如:

select nickname from cdb_memberfields where uid = (select uid from cdb_members where email like '%com.cn' and regdate = (select min(regdate) from cdb_members));

   可转化为:

select nickname from cdb_memberfields c_mf, cdb_members c_m where c_mf.uid = c_m.uid and c_m.email like '%com.cn' order by c_m.regdate asc limit 1;

(3) 使用变量

   还是上面的例子,可转化为如下两条语句:

select @min:=min(regdate) from cdb_members;
select nickname from cdb_memberfields c_mf, cdb_members c_m where c_mf.uid = c_m.uid and c_m.email like '%com.cn' and c_m.regdate = @min;

5.优化表

<1>对于经常修改的表,使用定长字段,而不用变长字段(对InnoDB表无效);删除没有用的字段。
<2>OPTIMIZE TABLE命令。
<3>对表进行合并;在查询中使用具有相同类型和长度的连接字段。

6.调整服务器设置

   可以通过调整一些服务器系统变量,提高MySQL服务器的性能。

<1>key_buffer_size:MyISAM表的索引块使用的缓冲区大小。一般可以设置为服务器可用内存的25%-30%。
<2>table_cache:MySQL的所有线程可以打开的表的总数。应根据Opened_tables状态变量的值来决定是否要增大该值。
<3>sort_buffer_size:为每个线程的排序操作分配的缓冲区大小。增大该值可以加快ORDER BY和GROUP BY操作。
<4>read_buffer_size:为每个线程的sequential scan分配的缓冲区。增大该值可以提高查询速度。
<5>read_rnd_buffer_size:为每个线程的random scan分配的缓冲区。索引排序操作后,MySQL从这个缓冲区中读取排好顺序的行,增大该值可以加快ORDER BY操作。每个客户端都会分配此缓冲区,所以不要全局变量设置得太大。
<6>binlog_cache_size:事务过程中为为binary log保存SQL语句的高速缓存。如果经常使用大型、多语句的事务,可以增大该值以获得更好的性能。
<7>bulk_insert_buffer_size:为每个线程的批量insert操作分配的树状cache的大小。
<8>tread_cache_size:服务器缓存线程以便重用的总数。如果有许多新连接,可以考虑增大该值。

undefinedundefinedundefinedundefinedundefinedundefinedundefinedundefinedundefinedundefinedundefinedundefinedundefinedundefined

关于如何进行MySQL管理基础中的性能优化问题的解答就分享到这里了,希望

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/106534.html

(0)

相关推荐

  • Python相对导入报错怎么解决

    技术Python相对导入报错怎么解决本篇内容主要讲解“Python相对导入报错怎么解决”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python相对导入报错怎么解决”吧!相对

    攻略 2021年11月25日
  • 家养狗狗排行榜,什么狗狗最适合在家里养

    技术家养狗狗排行榜,什么狗狗最适合在家里养最适合在家养的十大狗狗排名家庭里如果多了一位可爱的小成员的话家养狗狗排行榜,是可以改善整个家庭人员的情绪的。很多育儿专家认为,宠物作为孩子成长的小伙伴能够培养孩子的爱心,增强责任

    生活 2021年10月21日
  • 如何做酸辣汤,上海酸辣汤正宗做法是什么

    技术如何做酸辣汤,上海酸辣汤正宗做法是什么上海的酸辣汤原料如何做酸辣汤:老豆腐1块半,猪血1两,木耳半两,猪肉1两.,竹笋半支,冬菇,葱,姜,蛋,香菜 (够全家吃),水,酱油、淀粉半匙,米酒少许,味精半匙,盐1小匙,白醋

    生活 2021年10月20日
  • MySQL如何使用profiling

    技术MySQL如何使用profiling这篇文章将为大家详细讲解有关MySQL如何使用profiling,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Mysql SQL优化工具我们常使

    攻略 2021年11月3日
  • 基本RNN的Tensorflow实现是怎样的

    技术基本RNN的Tensorflow实现是怎样的这篇文章给大家介绍基本RNN的Tensorflow实现是怎样的,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。今天我们一起看下在tensorflow中基

    攻略 2021年11月24日
  • C语言是怎样输出唯一的子串

    技术C语言是怎样输出唯一的子串C语言是怎样输出唯一的子串,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。 题目描述给一个字符串,求长度为m的所有不重复的子

    攻略 2021年12月8日