sql优化:

1、硬件优化

sql服务器的机械硬盘换成固态硬盘,mysql升级更高的版本

2、软件优化

设计数据库符合三范式(3nf)标准

建立有效的索引

编写查询语句时,用什么字段拿什么字段

中间层优化,把常用的不经常改变的数据放到缓存里,直接去缓存拿数据,缓存中没有再去数据库拿

防sql注入:

1、对输入的数据进行过滤,对发送到数据库的数据进行转义

if(!get_magic_quotes_gpc()){ //判断是否开启

$newStr=addslashes($str); //然后用addslashes函数过滤

}

2、过滤一些常见的数据库操作关键字

$post = implode(',',$_POST);

preg_match('/select|insert|update|delete|and|or|create|alter|count|union|into|

load_file|outfile|'|''/i',$post) // 进行过滤

3、使用pdo预处理机制

跨站脚本的过滤:

RemoveXSS($post['name']);(RemoveXss是自己封装的函数)

join(连接):

select a.id,a.name,a.age,b.sex from 表A a LEFT JOIN 表B b on a.id = b.typeId;

说明:LEFT JOIN 左连接,除了获取符合的数据外,还获取左表的全部数据(字段的值不重复,若重复,后面的值覆盖前面的值),若右表无对应数据,则该字段的值显示为NULL

时间搜索:

?>

mysql的悲观锁和乐观锁:

乐观锁:比较适合读取操作比较频繁的场景,如果出现大量的写入操作,数据发生冲突的可能性就会增大,为了保证数据的一致性,应用层需要不断的重新获取数据,这样会增加大量的查询操作,降低了系统的吞吐量。

悲观锁:比较适合写入操作比较频繁的场景,如果出现大量的读取操作,每次读取的时候都会进行加锁,这样会增加大量的锁的开销,降低了系统的吞吐量。

mysql的索引:

索引类型:

normal:表示普通索引

unique:表示唯一索引,不允许重复的索引,如果该字段信息保证不会重复例如身份证号用作索引时,可设置为unique

full textl: 表示全文搜索的索引。 FULLTEXT 用于搜索很长一篇文章的时候,效果最好。用在比较短的文本,如果就一两行字的,普通的 INDEX 也可以。

总结,索引的类别由建立索引的字段内容特性来决定,通常normal最常见。

索引方法(Innodb和MyISAM默认的索引是Btree索引):

HASH(用于对等比较,如"="和" <=>")   //<=> 安全的比对   ,用与对null值比较,语义类似is     null()

BTREE(用于非对等比较,比如范围查询)>,>=,

复合索引:

两个或更多个列以上的索引被称作复合索引。

利用索引中的附加列,您可以缩小搜索的范围,但使用一个具有两列的索引不同于使用两个单独的索引。

复合索引的结构与电话簿类似,人名由姓和名构成,电话簿首先按姓氏对进行排序,然后按名字对有相同姓氏的人进行排序。如果您知道姓,电话簿将非常有用;如果您知道姓和名,电话簿则更为有用,但如果您只知道名不姓,电话簿将没有用处。

所以说创建复合索引时,应该仔细考虑列的顺序。对索引中的所有列执行搜索或仅对前几列执行搜索时,复合索引非常有用;仅对后面的任意列执行搜索时,复合索引则没有用处。

注意:

复合索引建立之后,索引列中的第一个字段索引就可以取消设置了;因为单独查询索引字段时,SQL会直接走复合索引而不会走独立索引

举例1:

复合索引字段   index 【status,name,price,type,time】

where条件    status = 1

他也可以走这个index索引(因为status字段在索引的的首位)

举例2:

复合索引字段   index 【status,name,price,type,time】

where条件  status = 1 and time > 1555555555

他也可以走这个index索引(按照字段顺序能找到对应字段)

举例3:

复合索引字段   index 【status,name,price,type,time】

where条件  status = 1 and price> 10.99 and name = 'zhangsan'

他不走这个index索引(没有按照字段的顺序)

总结:

如果复合索引使用效果不好(速度是否有提升,是否影响其他索引条件),设置独立索引,反之亦然

mysql语句的优化分析(explain):

mysql的where计算次序优先级:

非(!)>与(&&)>或(||)

解决方法:使用圆括号明确地分组相应的操作符,就不会走优先级

(id >1 or name='zhangsan')and sex='nan'

提示:

任何时候使用具有AND和OR操作符的WHERE子句,都应该使用圆括号明确地分组操作符,不要过分依赖默认计算次序,即使它确实是你想要的东西也是如此;使用圆括号没有什么坏处,它能消除歧义。

mysql的正则表达式:

where name REGEXP'1000|2000'

语句中使用了正则表达式1000|2000,|为正则表达式的OR操作符,它表示匹配其中之一,因此1000和2000都匹配并返回。

mysql的慢查询日志:

什么是慢查询?

答:在MySQL数据库中慢查询是在日志中记录执行速度慢的SQL语句,这个功能需要被开启才能被使用。在Windows系统下的MySQL 配置文件一般是是my.ini找到[mysqld]下面加上

代码如下:

slow_query_log=on

slow_query_log_file = D:/phpstudy_pro/Extensions/MySQL8.0.12/data/slow_man.log

long_query_time = 1

2. 在Linux系统下的MySQL

配置文件一般是是my.cnf找到[mysqld]下面加上

代码如下:

slow_query_log=on

slow_query_log_file = /var/lib/mysql/logs/slow.log

long_query_time = 1

说明:long_query_time是指执行超过多久的SQL会被日志记录下来,这里是10 秒;

log-slow-queries设置把日志写在那里(例子中慢查询日志会写到文件/var/lib/mysql/mysql-slow.log中),为空的时候,

系统会给慢查询日志赋予主机名,并加上slow.log。如果设置了参数log-long-format ,那么所有没有使用索引的查询也将被记录。

这个日志对性能的影响不大(所有的查询耗时都很小的情况下),并且强调了那些需要在意的查询(从结果中可以分析出那些查询SQL语句需要优化或者那些索引需要添加或者那些索引没有失效了)。

mysql扩展使用_mysql的扩展应用相关推荐

  1. centos 7 单独安装mysql和mysqli和pdo_mysql扩展

    2019独角兽企业重金招聘Python工程师标准>>> 一.mysql扩展 下载地址:http://git.php.net/?p=pecl/database/mysql.git;a= ...

  2. mycat实现mysql大表自动水平扩展

    1.mycat是一种数据库中间件,详细信息访问官网http://www.mycat.org.cn/ 2.架构图 从上图可以看出:原来架构单服务器单库单表向多服务器多库多表转换 这样做的好处是: 解决单 ...

  3. mysql checksum用法_MySQL checksum理解_mysql

    mysql checksum了解 在主从复制中Checksum常常需要对某些重要的表进行一致性检查. Checksum Table在逻辑备份时候前后是否可以用于验证数据一致性.扩展一下发现有一些有趣的 ...

  4. php补充 扩展,php补充安装扩展支持

    一般我们编译安装php时,不知道到底要安装哪些扩展,即使想全部安装,也不能将所有扩展的扩展名都列举出来,所以一般是需要哪些扩展就安装哪些扩展,待后续需要某扩展时再补充编译进去 如果我们运行的php版本 ...

  5. mysql dba 视频_MySQL DBA入门到高级系列视频教程 [高清完整版]

    其他教程 当前位置:主页 > 编程教程 > 其他教程 > MySQL DBA入门到高级系列视频教程 [高清完整版] MySQL DBA入门到高级系列视频教程 [高清完整版] 教程大小 ...

  6. mysql select 进阶_MySQL进阶_SELECT篇(一)

    MySQL中SELECT语句的基本语法是: SELECT [STRAIGHT_JOIN] [SQL_SMALL_RESULT] [SQL_BIG_RESULT] [HIGH_PRIORITY] [DI ...

  7. mysql fulltext类型_mysql索引类型:FULLTEXT、NORMAL、SPATIAL、UNIQUE的详细介绍(转)

    Normal 普通索引 表示普通索引,大多数情况下都可以使用 Unique 唯一索引 表示唯一的,不允许重复的索引,如果该字段信息保证不会重复例如身份证号用作索引时,可设置为unique 约束唯一标识 ...

  8. mysql fabric搭建_MySQL Fabric 安装部署

    MySQL Fabric 是一个用于管理 MySQL 服务器群的可扩展框架.该框架实现了两个特性 - 高可用性 (HA) 以及使用数据分片的横向扩展.这两个特性既可以单独使用,也可以结合使用. 环境: ...

  9. mysql fulltext 排序_mysql索引类型:FULLTEXT、NORMAL、SPATIAL、UNIQUE的区别

    Normal 普通索引 > 表示普通索引,大多数情况下都可以使用 Unique 唯一索引 > 表示唯一的,不允许重复的索引,如果该字段信息保证不会重复例如身份证号用作索引时,可设置为uni ...

最新文章

  1. 这是一个不完整的详细Java多线程,但对于初学者足够了,相信我,你会爱上她的
  2. Linux用init命令关机、重启、切换模式
  3. mysql预处理 更新_MySQL 预处理方法更新删除-2018年04月27日00时59分
  4. ASP.NET Core中间件(Middleware)实现WCF SOAP服务端解析
  5. android 语音编码,android – 如何将录制的语音编码为ogg vorbis?
  6. 计算机专业相关的毕业设计论文合集免费下载
  7. matlab画直方图下标,matlab画二维数据直方图/画二维概率分布
  8. C语言宏定义##连接符和#符的使用
  9. 2017.10.6 Java命名规范及使用情况
  10. Java 基础类型int 与 Integer
  11. Android音视频开发之-WebRTC技术实践
  12. 将正方形图片转换成圆形图片
  13. 【一起入门NLP】中科院自然语言处理作业二:中英文语料训练CBOW模型获得词向量(pytorch实现)【代码+报告】
  14. 【学习笔记】Python_Faker,制造测试数据的第三方库,创建姓名、手机、电话、浏览器头、时间、地址等
  15. 斯隆论社会责任:德鲁克日志之四月二十五日
  16. html图片底部显示,html – 将背景图像保持在底部
  17. NXP SJA1124 spi转lin芯片驱动
  18. LIBSVM实验-在matlab中使用heart_scale数据集
  19. python作中国地图背景气泡图_excel怎么制作中国地图背景效果的气泡图?
  20. ubuntu 16.04搭建OpenGrok

热门文章

  1. PCB设计必知:布局及设计规范
  2. dotnetcore Http服务器研究(一)
  3. C#基础回顾:GridView全选演示
  4. 六大技巧提升员工信息安全意识
  5. (转)Eclipse New Server 【无法输入server name】
  6. 拷贝的代码中去除行号的方法
  7. GTD时间管理---非行动性
  8. 基于LSTM的研报分类系统
  9. 使.NET WebBrowser不与IE或其他实例共享cookie
  10. MVC5管道处理模型