一、链接命令mysql
mysql -h$ip -P$port -u$user -p
二、查询连接状态sql
数据库里面,长链接是链接成功后,若是客户端持续有请求,则一直使用同一个连接。数据库
短链接则是指每次执行完不多的几回查询就断开链接,下次查询从新创建一个缓存
创建链接的过程一般是比较复杂的,因此我建议你在使用中尽可能减小创建的动做,也就是使用长链接bash
可是所有是用长链接后,你可能会发现,有些时候MySQL占用内存涨得特别快,架构
这是由于MySQL在执行过程当中临时使用的内存管理在链接对象里面的,这些资源会在链接断开的时候才释放,性能
因此若是长连接积累下来,可能致使内存占用大,被系统强行杀掉,从现象看就是MySQL异常重启了优化
一、按期断开长连接,使用一段时间,或者程序里面判断执行过一个占用内存的大查询后,断开链接,以后要查询再链接spa
二、若是你用的是MySQL5.7或更新版本,能够在每次执行一个比较大的操做后,经过执行设计
mysql_reset_connection
来从新初始化链接资源,这个过程不须要重连或从新作权限验证,可是会将链接回复到刚刚建立完时的状态
一、查询缓存的失效很是频繁,只要有一个表更新,这个表上全部的查询缓存都被清空
二、对于更新压力大的数据库来讲,查询缓存的命中率会很是低,
三、除非你的业务就是有一张静态表,很长时间才会更新一次(好比一个系统配置表)
MySQL提供的按需使用的方式
query_cache_type 设置成 DEMAND
mysql> select SQL_CACHE * from T where ID=10;
MySQL 8.0 版本直接将查询缓存的整块功能删掉了,也就是说 8.0 开始完全没有这个功能了。
若是你的语句不对,就会收到“You have an error in your SQL syntax”的错误提醒,
好比下面这个语句select 少打了开头的字母“s”
mysql> elect * from t where ID=1; ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to
your MySQL server version for the right syntax to use near 'elect * from t where ID=1' at line 1
通常语法错误会提示第一个出现错误的位置,因此你要关注的是紧接"use naar"的内容
一、在表里面有多个索引的时候,决定使用哪一个索引
二、多表关联(ioin)的时候,决定各个表的连接顺序
mysql> select * from t1 join t2 using(ID) where t1.c=10 and t2.d=20;
既能够先从表 t1 里面取出 c=10 的记录的 ID 值,再根据 ID 值关联到表 t2,再判断 t2 里面 d 的值是否等于20
也能够先从表 t2 里面取出 d=20 的记录的 ID 值,再根据 ID 值关联到 t1,再判断 t1 里面 c 的值是否等于10
这两种执行方法的逻辑结果时同样的,可是执行的效率会有不一样,而优化器的做用就是决定选择哪个方案
一、调用 InnoDB 引擎接口取这个表的第一行,判断 ID 值是否是1,若是不是则跳过,若是是则将这行存在结果集中
二、调用引擎接口取"下一行",重复相同的判断逻辑,直到取到这个表的最后一行
三、执行器将上述遍及过程当中全部知足条件的行组成的记录集做为结果集返回给客户端。
第一调用的是"取知足条件的第一行"这个接口,
以后循环取"知足条件的下一行"
引擎扫描行数跟rows_examined并非彻底相同的
若是表 T 中没有字段 k,而你执行了这个语句 select* from T where k=1, 那确定是会报“不存在这个列”的错误:
“Unknown column ‘k’ iin ‘where clause’”。
你以为这个错误是在咱们上面提到的哪一个阶段报出来的呢?
做者回复: “不是执行器”这一点,你分析得很好😄
做者回复: MySQL确实在设计上受Oracle影响颇深。就是这样哈,分析器作了这个工做。另外有评论里面举例高性能MySQL 里面概念的同窗、说正文里面已经暗示答案的同窗,远程点赞了哈😄😄 就喜欢大家这么机智的回答👍🏿