Mysql

通过PHP单例模式与长连接减少MySql连接数

在Mysql驱动的PHP网站中,MySql连接的一般都是利用脚本的结束来进行释放,在一些分层写的php网站中,若一个页面含有多个数据访问类,由于每个数据访问类都会有数据库的连接,导致这一个页面在脚本结束前会有多个数据库连接,在一些大型的页面连接可能多至数十上百,为此需要进行必要的控制,对于解释性的PHP语言,脚本是顺序执行的,也就是说数据库连接的利用同时只有一个,根据这个特点,可以用单例模式来进行改造。

<?php
  class ConnecToDB
  {
      private static $instance;
      private function _constuct()
      {
      } //私有构造函数,防止外界构造新对象,
      public static function GetConnec()
      {
          if (!self::$instance instanceof self) {
              self::$instance =new self;//若当前对象实例不存在
          }
          $temp=self::$instance; //获取当前单例
            return $temp::Con() ;  //调用对象私有方法连接 数据库
      }
      //连接到数据库
      private static function 
                    

Laravel中的不安全SQL函数

我最近了解到并非Laravel中的所有查询构建器功能都是“安全的”。这意味着不应将用户输入直接传递给它,因为它可能会将您的应用程序暴露给SQL注入漏洞。

过去几天很明显,社区对这些不安全的功能知之甚少。许多开发人员和我一样认为,Laravel查询构建器完全阻止了SQL注入攻击。

这篇博文旨在提高人们对什么是安全的,哪些不安全的意识。…

                

发现大量的mysql TIME_WAIT解决办法

今天早上一上班,有同事就反映公司好几个网站都打不开,登陆数据库
服务器(windows),发现很卡,于是重启了下服务器,进入系统后,没过一会问题依旧,查看了下系统进程,发现mysql占用率达到99%,可以肯定的是mysql连接出现问题:
netstat -an
192.168.12.13:3306      192.168.12.12:30443      TIME_WAIT
192.168.12.13:3306      192.168.12.12:30444      TIME_WAIT
192.168.12.13:3306      192.168.12.12:30445      TIME_WAIT
192.168.12.13:3306      192.168.12.12:30446      TIME_WAIT
192.168.12.13:3306      192.168.12.12:30447      TIME_WAIT
192.168.12.13:3306      192.168.12.12:30448      TIME_WAIT
192.168.12.13:3306      192.168.12.12:30449      TIME_WAIT
192.168.12.13:3306      192.168.12.12:30450      TIME_WAIT
192.168.12.13:3306      192.168.12.12:30451      TIME_WAIT
192.168.12.13:3306      192.168.12.12:30452      TIME_WAIT…
                

MySQL 数据库优化,看这篇就够了

 

前言

 

数据库优化一方面是找出系统的瓶颈,提高MySQL数据库的整体性能,而另一方面需要合理的结构设计和参数调整,以提高用户的相应速度,同时还要尽可能的节约系统资源,以便让系统提供更大的负荷.

 

1、优化一览图

 

MySQL 数据库优化,看这篇就够了

 

2、优化

 

笔者将优化分为了两大类,软优化和硬优化,软优化一般是操作数据库即可,而硬优化则是操作服务器硬件及参数设置.

 

2.1 软优化

 

2.1.1 查询语句优化

 

1、首先我们可以用EXPLAIN或DESCRIBE(简写:DESC)命令分析一条查询语句的执行信息.

 

2.例:

 

DESC SELECT * FROM `user`

 

显示:

 

MySQL 数据库优化,看这篇就够了

 

其中会显示索引和查询数据读取数据条数等信息.

 

2.1.2 优化子查询

 

在MySQL中,尽量使用JOIN来代替子查询.因为子查询需要嵌套查询,嵌套查询时会建立一张临时表,临时表的建立和删除都会有较大的系统开销,而连接查询不会创建临时表,因此效率比嵌套子查询高.

 

2.1.3 使用索引

 

索引是提高数据库查询速度最重要的方法之一,关于索引可以参高笔者<MySQL数据库索引>一文,介绍比较详细,此处记录使用索引的三大注意事项:

 

1、LIKE关键字匹配'%'开头的字符串,不会使用索引.

 

2、OR关键字的两个字段必须都是用了索引,该查询才会使用索引.

 

3、使用多列索引必须满足最左匹配.

 

2.1.4 分解表

 

对于字段较多的表,如果某些字段使用频率较低,此时应当,将其分离出来从而形成新的表,

 

2.1.5 中间表

 

对于将大量连接查询的表可以创建中间表,从而减少在查询时造成的连接耗时.

 

2.1.6 增加冗余字段

 

类似于创建中间表,增加冗余也是为了减少连接查询.

 

2.1.7 分析表,检查表,优化表

 

分析表主要是分析表中关键字的分布,检查表主要是检查表中是否存在错误,优化表主要是消除删除或更新造成的表空间浪费.

 

1、分析表:
    

MySQL8.0新特性集锦

1. 默认字符集由latin1变为utf8mb4

在8.0版本之前,默认字符集为latin1,utf8指向的是utf8mb3,8.0版本默认字符集为utf8mb4,utf8默认指向的也是utf8mb4。

2. MyISAM系统表全部换成InnoDB表

系统表全部换成事务型的innodb表,默认的MySQL实例将不包含任何MyISAM表,除非手动创建MyISAM表。

# MySQL 5.7
mysql> select distinct(ENGINE) from information_schema.tables;
+--------------------+
| ENGINE             |
+--------------------+
| MEMORY             |
| InnoDB             |
| MyISAM             |
| CSV                |
| PERFORMANCE_SCHEMA |
| NULL               |
+--------------------+
6 rows 

MySQL5.7的JSON基本操作

MySQL5.7的JSON基本操作

MySQL从5.7版本开始就支持JSON格式的数据,操作用起来挺方便的。

建表
在新建表时字段类型可以直接设置为json类型,比如我们创建一张表:

mysql> CREATE TABLE `test_user`(`id` INT PRIMARY KEY AUTO_INCREMENT, `name` VARCHAR(50) NOT NULL, `info` JSON);

json类型字段可以为NULL…

    

面试中有哪些经典的数据库问题

一、为什么用自增列作为主键

1、如果我们定义了主键(PRIMARY KEY),那么InnoDB会选择主键作为聚集索引、如果没有显式定义主键,则InnoDB会选择第一个不包含有NULL值的唯一索引作为主键索引、如果也没有这样的唯一索引,则InnoDB会选择内置6字节长的ROWID作为隐含的聚集索引(ROWID随着行记录的写入而主键递增,这个ROWID不像ORACLE的ROWID那样可引用,是隐含的)。

2、数据记录本身被存于主索引(一颗B+Tree)的叶子节点上。这就要求同一个叶子节点内(大小为一个内存页或磁盘页)的各条数据记录按主键顺序存放,因此每当有一条新的记录插入时,MySQL会根据其主键将其插入适当的节点和位置,如果页面达到装载因子(InnoDB默认为15/16),则开辟一个新的页(节点)

3、如果表使用自增主键,那么每次插入新的记录,记录就会顺序添加到当前索引节点的后续位置,当一页写满,就会自动开辟一个新的页

4、如果使用非自增主键(如果身份证号或学号等),由于每次插入主键的值近似于随机,因此每次新纪录都要被插到现有索引页得中间某个位置,此时MySQL不得不为了将新记录插到合适位置而移动数据,甚至目标页面可能已经被回写到磁盘上而从缓存中清掉,此时又要从磁盘上读回来,这增加了很多开销,同时频繁的移动、分页操作造成了大量的碎片,得到了不够紧凑的索引结构,后续不得不通过OPTIMIZE TABLE来重建表并优化填充页面。…

Centos7安装MySQL8.0 – 操作手册

MySQL 8 正式版 8.0.11 已发布,官方表示 MySQL 8 要比 MySQL 5.7 快 2 倍,还带来了大量的改进和更快的性能!

一.  Mysql8.0版本相比之前版本的一些特性

1) 默认编码utf8
默认编码使用utf8mb4, utf8mb4编码是utf8编码的超集,兼容utf8,并且能存储4字节的表情字符历史,MySQL数据库的 "utf8"并不是真正概念里的 UTF-8。MySQL中的"utf8"编码只支持最大3字节每字符。真正的大家正在使用的UTF-8编码是应该能支持4字节每个字符。MySQL的开发者没有修复这个bug。他们在2010年增加了一个变通的方法:一个新的字符集"utf8mb4"另外,utf-32编码固定使用4字节,32bit存储相比utf8浪费空间。

2) 降序索引
在之前的版本中可以创建,但是实际创建的还是升序索引