regexpmysql优化_mysql性能优化
mysql 良好的安全连接,⾃带查询解析,sql语句优化,使⽤读写锁(细化到⾏),事务隔离和多版本并发控制提⾼并发,完备的事务⽇志记录,强⼤的存储引擎提供⾼效查询(表记录可达百万级)。如果是innerdb还可在崩溃后进⾏完整的恢复。优点⾮常多,但是还是需要优化
1,SQL优化的⼀般步棸
1.1,查看sql执⾏频率
show status like 'Com_%' ; // Com_select :执⾏select操作的次数,⼀次累计加1。其他类似
以下只针对InnoDB存储引擎,累加算法略有不同 show status like 'innodb_rows_%'
如何在虚拟机上安装linux系统
Innodb_rows_read:select 查询操作插⼊的⾏数
Innodb_rows_inserted/updated/deleted:执⾏insert/update/delete 操作的⾏数
通过以上的参数,可以了解数据库应⽤是以查询为主还是写⼊数据为主。
对于事务性的应⽤,通过Com_commit和Com_rollback可以了解事务的提交和回滚情况,对于回滚操作⾮常的频繁的数据库,可能意味着应⽤编写的存在问题。
基本情况了解:
Connections:试图链接数据库服务的次数
Uptime:服务器⼯作时间
slow_queries:慢查询次数
1.2,定位执⾏效率⽐较低的sql语句
通过慢查询⽇志定位慢的SQl语句,⽤--slow_query_log_file[=file_name](mysql5.6之后) 选项启动中,mysqld会写⼀个所有执⾏时间超过long_query_time秒的SQL语句的⽇志⽂件。
使⽤SHOW FULL PROCESSLIST:查看当前Mysql在进⾏的线程,同时对⼀些锁表操作进⾏优化
slow_query_log_file=/var/lib/mysql/Dragonwake-slow.log // # 将查询执⾏时间较慢的语句进⾏记录 mysql配置⽂件
/etc/myf 。 如果未指定file_name,默认为sql5.6之前 log-slow-queries
long_query_time=1 # 执⾏超过1秒的sql会被log下来
⽇志查询 show variables like 'log_%'
⼆进制⽇志数⽬:show master logs; // 必须使⽤⼆进制⽇志才可以使⽤查询
1.3,通过explain分析慢SQLi
explain SQl语句
结果:
--select_type:表⽰select的类型,常见的类型是SIMPLE (既不是⽤表连接或⼦查询),PRIMARY(主查询,即外层的查
询),UNION(Union中的第⼆个或后⾯的查询语句),SUBQUERY(⼦查询中的第⼀个select查询)等
--table:输出结果的表名
--type:表⽰MYSQL在表中到⾏的⽅式,或者叫访问类型
常见的有 ALl index range ref eq_ref const system NUll 从左到右性能由差到好
type=all 全表扫描
type=index 索引全扫描,mysql遍历所有索引来查询
type=range:索引范围扫描,常见于 , >= betweenelasticsearch启动
type=ref:使⽤⾮唯⼀索引扫描或唯⼀索引的前缀扫描,返回匹配某个单独值得匹配
网页界面设计的特点是什么
type=eq_ref 类似ref 就在于使⽤得索引是唯⼀索引,对于每个索引键值,表中只有⼀条记录匹配,简单来说,就是多表连接中使⽤primary key(主键)和unique index(唯⼀索引)作为关联条件
mysql语句的执行顺序type=const/system 但表中最多有⼀个匹配⾏,查询起来⾮常迅速,⼀般主键primary key或唯⼀索引unique index进⾏得查询,通过唯⼀索引ek_email访问得时候,类型type为const;⽽从我们构造的仅有⼀条记录得a表中检索时,类型type为system
type=null :mysql不⽤访问表或索引,就得到就结果
类型type还有其他值,如ref_or_null(与ref相似,区别在于条件包含对null的查询),index_merge(索引合并优化),unique_subquery( in 后⾯是⼀个查询主键字段的⼦查询 ),index_subquery(与unique_subquery相似,区别在于 in 后⾯时⼀个查询⾮唯⼀索引字段的⼦查询)
--possile-key:表⽰查询时可能使⽤的索引
--key:实际使⽤的索引
--key-len:使⽤到索引字段的长度
--rows :扫描⾏的数量
--Extra:执⾏情况的说明和描述,包含不适合在其他列中显⽰但是对执⾏计划⾮常重要的额外信息Using where :表⽰优化器除了利⽤索引来加速访问之外,还需要索引回表查询数据
1.4,通过show profile 分析SQL
查看当前mysql是否⽀持profile
socket accept默认profile是关闭的,可以通过set语句在session级别开启profiling, set profiling=1
使⽤⽅法:
-执⾏统计查询
查询上⾯的SQl query ID
查询上述执⾏过程中每个线程的状态和消耗时间
Sending data 表⽰mysql线程开始访问数据并⾏把结果返回客户端,⽽不仅仅是返回结果给客户端。由于在Sending data 状态下,mysql线程往往需要⼤量的磁盘读取操作,所以是整个查询中耗时最长的。
灰度直方图怎么看查看详细细节并排序
SELECT
STATE,
SUM(DURATION) AS TR,
ROUND(
100 * SUM(DURATION) / (
SELECT
SUM(DURATION)
FROM
information_schema.PROFILING
WHERE
QUERY_ID = 190
),
2
) AS PR,
COUNT(*) AS Calls,
SUM(DURATION) / COUNT(*) AS "R/Call"
FROM
information_schema.PROFILING
WHERE
QUERY_ID = 190
GROUP BY
STATE
ORDER BY
TR DESC;
进⼀步获取all,cpu,block io , context switch , page faults 等明细来查看mysql在使⽤什么资源时耗费了过多的时间此时可通过获取Sending data 时间消耗在cpu
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论