mysql怎么优化设置 mysql优化命令
mysql数据库如何优化?谁能给出点具体的解决方案?
1、explain:解释sql的执行计划,后边的sql不执行
目前成都创新互联已为近1000家的企业提供了网站建设、域名、雅安服务器托管、网站运营、企业网站设计、瑞丽网站维护等服务,公司将坚持客户导向、应用为本的策略,正道将秉承"和谐、参与、激情"的文化,与客户和合作伙伴齐心协力一起成长,共同发展。
2、explain partitions :用于查看存在分区的表的执行计划
3、explain extended:待验证
4、show warnings:
5、show create table:查看表的详细的创建语句,便于用户对表进行优化
6、show indexes :产看表的所有索引,show indexes from table_name,同样也可以从information_schema.statistics表中获得同样的信息。cardinality列很重要,表示数据量。
7、show tables status: 查看数据库表的底层大小以及表结构,同样可以从information_schema.tables表中获得底层表的信息。
8、show [global|session]status:可以查看mysql服务器当前内部状态信息。可以帮助却行mysql服务器的负载的各种指标。默认是session。同information_schema.global_status和information_schema.session_status
9、show [global|session] variables :查看当前mysql系统变量的值,其中一些值能影响到sql语句的执行方式。同information_schema.global_variables和information_schema.session_variables;
10、information_schema:包含的表的数量和mysql的版本有关系。
mysql 如何优化无索引查询
mysql优化无索引查询:SQL CREATE TABLE test_tab (id INT,name VARCHAR(10),age INT,val VARCHAR(10)。
1、对查询进行优化,应尽量避免全表扫描,首先应考虑在where及order by涉及的列上建立索引。
2、应尽量避免在 where子句中使用!=或操作符,否则将引擎放弃使用索引而进行全表扫描。
3、应尽量避免在 where子句中对字段进行null值判断,否则将导致引擎放弃使用索引而进行全表扫描。
运行mysql安装文件:
按 Next,然后选择安装方式,有 "Typical(默认)"、"Complete(完全)"、"Custom(用户自定义)",选择第二个选项 "Custom",下一步, MySQL Server (mysql服务器), Developer Components (开发者部分), Debug Symbols (调试符号), Server data files (服务器数据文件) 默认。
改变安装路径;原路径是"C:\Program Files\MySQL\MySQL Server 5.5\",也可以修改为:"E:\Program Files\MySQL Server 5.5\"。
linux 下怎么优化mysql占用内存?
修改mysql配置文件,优化缓存大小和连接数连接方式,优化sql语句 ,记得mysql好像是有工具可以查看最占用资源的sql语句,找到他,优化他。
安装好mysql后,配制文件应该在/usr/local/mysql/share/mysql目录中,配制文件有几个,有my-huge.cnf my-medium.cnf my-large.cnf my-small.cnf,不同的流量的网站和不同配制的服务器环境,当然需要有不同的配制文件了。
一般的情况下,my-medium.cnf这个配制文件就能满足我们的大多需要;一般我们会把配置文件拷贝到/etc/my.cnf 只需要修改这个配置文件就可以了,使用mysqladmin variables extended-status _u root _p 可以看到目前的参数,有3个配置参数是最重要的,即key_buffer_size,query_cache_size,table_cache。
key_buffer_size只对MyISAM表起作用,
key_buffer_size指定索引缓冲区的大小,它决定索引处理的速度,尤其是索引读的速度。一般我们设为16M,实际上稍微大一点的站点 这个数字是远远不够的,通过检查状态值Key_read_requests和Key_reads,可以知道key_buffer_size设置是否合理。比例 key_reads / key_read_requests应该尽可能的低,至少是1:100,1:1000更好(上述状态值可以使用SHOW STATUS LIKE ‘key_read%’获得)。 或者如果你装了phpmyadmin 可以通过服务器运行状态看到,笔者推荐用phpmyadmin管理mysql,以下的状态值都是本人通过phpmyadmin获得的实例分析:
这个服务器已经运行了20天
key_buffer_size _ 128M
key_read_requests _ 650759289
key_reads - 79112
比例接近1:8000 健康状况非常好
mysql 性能优化参数配置
mysql -u root -p 回车输入密码进入mysql
show processlist;
查看连接数,可以发现有很多连接处于sleep状态,这些其实是暂时没有用的,所以可以kill掉
show variables like "max_connections";
查看最大连接数,应该是与上面查询到的连接数相同,才会出现too many connections的情况
set GLOBAL max_connections=1000;
修改最大连接数,但是这不是一劳永逸的方法,应该要让它自动杀死那些sleep的进程。
show global variables like 'wait_timeout';
这个数值指的是mysql在关闭一个非交互的连接之前要等待的秒数,默认是28800s
set global wait_timeout=300;
修改这个数值,这里可以随意,最好控制在几分钟内
set global interactive_timeout=500;
修改这个数值,表示mysql在关闭一个连接之前要等待的秒数,至此可以让mysql自动关闭那些没用的连接,但要注意的是,正在使用的连接到了时间也会被关闭,因此这个时间值要合适
SHOW VARIABLES LIKE '%table_open_cache%';
查看
show global status like 'Open%tables';
MySQL常用优化方案
语句执行后,会显示三个字段: Query_ID(执行ID) | Duration(持续时间)| Query(查询语句) ;
拿到后Query_ID后,可执行 show profile for query Query_ID ,查看详细的准备时间,执行时间、执行结束( preparing、executing、end )等。
显示用户正在运行的线程,需要注意的是,除了 root 用户能看到所有正在运行的线程外,其他用户都只能看到自己正在运行的线程,看不到其它用户正在运行的线程。除非单独个这个用户赋予了PROCESS 权限。
显示字段包含: User| Host| db | Command | Time| State| Info 等。
解析语句,查询是否命中索引,及,命中何种索引,用以判断是否符合我们的预期。
返回字段包含: select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra 等。
select_type 常见类型:
(1) SIMPLE(简单SELECT,不使用UNION或子查询等)
(2) PRIMARY(子查询中最外层查询,查询中若包含任何复杂的子部分,最外层的select被标记为PRIMARY)
(3) UNION(UNION中的第二个或后面的SELECT语句)
(4) SUBQUERY(子查询中的第一个SELECT,结果不依赖于外部查询)
table 常见类型:
显示这一行的数据是关于哪张表的.
有时不是真实的表名字,看到的是derivedx(x是个数字,我的理解是第几步执行的结果)
type 常见类型:
对表访问方式,表示MySQL在表中找到所需行的方式,又称“访问类型”。
常用的类型有: ALL、index、range、 ref、eq_ref、const、system、NULL (从左到右,性能从差到好)
possible_keys
指出MySQL能使用哪个索引在表中找到记录,查询涉及到的字段上若存在索引,则该索引将被列出,但不一定被查询使用(该查询可以利用的索引,如果没有任何索引显示 null)
该列完全独立于EXPLAIN输出所示的表的次序。这意味着在possible_keys中的某些键实际上不能按生成的表次序使用。
如果该列是NULL,则没有相关的索引。在这种情况下,可以通过检查WHERE子句看是否它引用某些列或适合索引的列来提高你的查询性能。如果是这样,创造一个适当的索引并且再次用EXPLAIN检查查询
key
key列显示MySQL实际决定使用的键(索引),必然包含在possible_keys中
如果没有选择索引,键是NULL。要想强制MySQL使用或忽视possible_keys列中的索引,在查询中使用FORCE INDEX、USE INDEX或者IGNORE INDEX。
key_len
表示索引中使用的字节数,可通过该列计算查询中使用的索引的长度,非实际长度,为最大可能长度。
注:不损失精确性的情况下,长度越短越好。
ref
列与索引的比较,表示上述表的连接匹配条件,即哪些列或常量被用于查找索引列上的值。
rows
估算出结果集行数,表示MySQL根据表统计信息及索引选用情况,估算的找到所需的记录所需要读取的行数;
extra
该列包含MySQL解决查询的详细信息,有以下几种情况:
(1).Distinct
一旦MYSQL找到了与行相联合匹配的行,就不再搜索了
(2).Not exists
MYSQL优化了LEFT JOIN,一旦它找到了匹配LEFT JOIN标准的行,就不再搜索了
(3).Range checked for each
Record(index map:#)
没有找到理想的索引,因此对于从前面表中来的每一个行组合,MYSQL检查使用哪个索引,并用它来从表中返回行。这是使用索引的最慢的连接之一
(4).Using filesort
看到这个的时候,查询就需要优化了。MYSQL需要进行额外的步骤来发现如何对返回的行排序。它根据连接类型以及存储排序键值和匹配条件的全部行的行指针来排序全部行;
(5).Using temporary
看到这个的时候,查询需要优化了。这里,MYSQL需要创建一个临时表来存储结果,这通常发生在对不同的列集进行ORDER BY上,而不是GROUP BY上;
(6).Using index
列数据是从仅仅使用了索引中的信息而没有读取实际的行动的表返回的,这发生在对表的全部的请求列都是同一个索引的部分的时候。
(7).Using where
使用了WHERE从句来限制哪些行将与下一张表匹配或者是返回给用户。如果不想返回表中的全部行,并且连接类型ALL或index,这就会发生,或者是查询有问题。
mysql优化
1,sql的编译顺序
sql 编译顺序 from… on… join… where… order by… group by… having… select…
2,查看sql语句性能:
explain 查询sql语句
3,优化
(1). 最佳作前缀,使用索引顺序(按编译顺序)与定义索引时顺序一致,若该字段有跳过、反序,该字段及后面字段索引失效
(2). where条件中一切不是=的操作大概率会使索引失效,包括in、!=、、is null、计算、函数等等
(3). 查询字段与条件字段不一致时使用子查询,避免临时表出现
(4). 若用了复合索引,尽量使用全部索引字段
(5). 能不查询多字段时,尽量使用索引覆盖
(6). 使用like模糊查询时,按关键字左匹配,即‘x%’,若使用’%x%’,索引失效
(7). or会使全部索引失效
(8). 尽量不要导致类型转换,否则索引失效
(9). 使用order by时,根据表中数据量调整单路还是双路查询,也可以调整buffer区大小:如set_max_length_for_sort_data = 1024 (单位byte)
(10). 避免使用select *…
(11). 分页偏移量大时,尽量使用子查询 select * from tab where id=(select id from tab limit 100000,1) limit 100;
本文名称:mysql怎么优化设置 mysql优化命令
文章源于:http://scyanting.com/article/hijpdi.html