sql优化

搭建media wiki

橙三吉。 提交于 2020-01-25 10:11:20
media wiki搭建 1 准备环境LAMP 准备源码包libmcrypt-2.5.8.tar.gz, httpd-2.2.17.tar.gz, mediawiki-1.30.0.tar.gz ,mysql-5.5.22.tar.gz 安装Apache cd /usr/local/src rz上传 tar zxf httpd-2.2.17.tar.gz cd httpd-2.2.17 ./configure --prefix=/data/server/httpd --enable-so --enable-rewrite --enable-charset-lite -- enable-cgi make && make install 2 关闭防火墙,做路径优化, systemctl stop firewalld ln -s /data/server/httpd/bin/* /usr/local/bin/ 3启动apache,ip网页验证 apachectl start 4 yum -y install ncurses-devel yum -y install cmake 5创建运行用户 groupadd mysql useradd -s /sbin/nologin -M -g mysql mysql 6编译安装mysql tar zxf mysql-5.5.22.tar.gz cd

SQLSERVER中统计所有表的记录数

拈花ヽ惹草 提交于 2020-01-25 07:24:03
今天群里的一个朋友问了个问题:如何把数据库里所有表的记录数都统计出来? 由于以前我曾经试着写过一个存储过程,作用就是删除所有表的内容,思路是这样的: 首先通过sysobjects表构造一个sql语句字符串'DELETE 表名',其中表名就是sysobjects中的name列,把这些DELETE语句字符串连接起来的方法一是通过游标,二则是直接利用如下语句: select @sql = @sql + 'DELETE ' + name from sysobjects where xtype='U'; 这是一个很有用的技巧,在合适的地方用会很大程度的优化语句运行速度. 然后就是通过exec(@sql)执行该字符串. 而把数据库所有表的记录数统计出来和这个思路几乎完全一样,不同的就是把'DELETE 表名' 改为'SELECT 表名,COUNT(1) FROM 表名',主要这点不同而已,如果构造完字符串并执行完毕,可以把结果输出到一个临时表,那么再统计所有记录数就轻而易举了. 下面就是我写的一个语句: declare @sql varchar(8000),@count int,@step int set nocount on --@step越大运行速度越快,但如果太大会造成生成的sql字符串超出限制导致语句不完整出错 --建议为50 set @step = 50 if object_id(N

SQLSERVER中统计所有表的记录数

為{幸葍}努か 提交于 2020-01-25 07:21:38
今天群里的一个朋友问了个问题: 如何把数据库里所有表的记录数都统计出来? 由于以前我曾经试着写过一个存储过程,作用就是删除所有表的内容,思路是这样的: 首先通过sysobjects表构造一个sql语句字符串'DELETE 表名',其中表名就是sysobjects中的name列,把这些DELETE语句字符串连接起来的方法一是通过游标,二则是直接利用如下语句: select @sql = @sql + 'DELETE ' + name from sysobjects where xtype='U'; 这是一个很有用的技巧,在合适的地方用会很大程度的优化语句运行速度. 然后就是通过exec(@sql)执行该字符串. 而把数据库所有表的记录数统计出来和这个思路几乎完全一样,不同的就是把'DELETE 表名' 改为'SELECT 表名,COUNT(1) FROM 表名',主要这点不同而已,如果构造完字符串并执行完毕,可以把结果输出到一个临时表,那么再统计所有记录数就轻而易举了. 下面就是我写的一个语句: declare @sql varchar ( 8000 ), @count int , @step int set nocount on -- @step越大运行速度越快,但如果太大会造成生成的sql字符串超出限制导致语句不完整出错 -- 建议为50 set @step = 50 if

【MySQL】项目中常用的 18 条 MySQL 优化 打造高性能 SQL 语句

微笑、不失礼 提交于 2020-01-25 06:21:28
1. 执行计划EXPLAIN 要想做MySQL优化,首先必须知道如何善用执行计划EXPLAIN。下图做个简单的示例并标注需要重点关注的数据。 type列,连接类型。一个好的sql语句至少要达到range级别。杜绝出现all级别 key列,使用到的索引名。如果没有选择索引,值是NULL。可以采取强制索引方式 key_len列,索引长度 rows列,扫描行数。该值是个预估值 Extra列,详细说明。注意常见的不太友好的值有:Using filesort, Using temporary 关于EXPLAIN的详细分析,可以阅读另一篇文章: 【MySQL】执行计划EXPLAIN详解 2. SELECT语句务必指明字段名称 SELECT *增加很多不必要的消耗(cpu、io、内存、网络带宽);增加了使用覆盖索引的可能性;当表结构发生改变时,前断也需要更新。所以要求直接在select后面接上字段名。 3. 如果排序字段没有用到索引,就尽量少排序 4. 当只需要一条数据的时候,使用LIMIT 1 这是为了使EXPLAIN中type列达到const类型 5. SQL语句中IN包含的值不应过多 MySQL对于IN做了相应的优化,即将IN中的常量全部存储在一个数组里面,而且这个数组是排好序的。但是如果数值较多,产生的消耗也是比较大的。再例如:select id from table_name

MySQL 8.0 技术详解

大兔子大兔子 提交于 2020-01-25 05:36:28
MySQL 8.0 简介 MySQL 5.7 到 8.0,Oracle 官方跳跃了 Major Version 版本号,随之而来的就是在 MySQL 8.0 上做了许多重大更新,在往企业级数据库的路上大步前行,全新 Data Dictionary 设计,支持 Atomic DDL,全新的版本升级策略,安全和账号管理加强,InnoDB 功能增强等,目前小版本已经 release 到 8.0.16,新的功能仍然在持续推出。 RDS MySQL 8.0 产品是阿里云推出的 MySQL 系列云产品之一,使用完全兼容 MySQL 8.0 的阿 里云 AliSQL 8.0 分支,除了官方在 MySQL 8.0 推出的全新功能外,AliSQL 沉淀了许多在 Alibaba 集团电商业务和云上几十万客户在使用 MySQL 过程中遇到的问题和需求,以此来加固AliSQL, 提升 AliSQL 的性能和稳定性。 下面分别对 MySQL 8.0 和 AliSQL 8.0 相关的版本和功能做简短的介绍: MySQL 8.0 版本更新 1. 数据字典 MySQL 8.0 摒弃了 Server Layer 定义的 FRM 文件和其它非事务表,使用了一组 InnoDB 表来 保存数据字典,支持事务特性。 2. Atomic DDL 在 Data Dictionary 支持事务特性的基础上,8.0 增加了一个

Mysql常用

家住魔仙堡 提交于 2020-01-25 03:35:52
文章目录 mysql的语句的执行过程 mysql的优化器优化 判null 外键约束与级联操作 mysql的语句的执行过程 from join on where group by (从此处开始可以使用select中指定的别名) avg、sum、max having select distinct order by mysql的优化器优化 判null ISNULL(xxx):只有xxx为null 的时候 ISNULL(exp) 函数的返回值为1 ,空串和有数据都为0; is null 外键约束与级联操作 添加外键约束: CONSTRAINT 外键名称(形如:FK_从表_主表) FOREIGN KEY((从表外键字段)) REFERENCES 主表(主键字段); 级联操作(在外键的最后面添加): . cascade方式 在父表上update/delete记录时,同步update/delete掉子表的匹配记录 . set null方式 在父表上update/delete记录时,将子表上匹配记录的列设为null 要注意子表的外键列不能为not null . No action方式 如果子表中有匹配的记录,则不允许对父表对应候选键进行update/delete操作 . Restrict方式 同no action, 都是立即检查外键约束 . Set default方式 父表有变更时

函数之sql语句

女生的网名这么多〃 提交于 2020-01-25 01:11:17
1 函数 1.1 函数 函数一般是在数据上执行的,它给数据的转换和处理提供了方便。只是将取出的数据进行处理,不会改变数据库中的值。 函数 根据处理的数据分为单行函数和聚合函数( 组 函数) 组函数又被称作聚合函数,用于对多行数据进行操作,并返回一个单一的结果,组函数仅可用于选择列表或查询的 having 子句 单行函数对单个数值进行操作,并返回一个值。 dual 是 一个系统表。注意 用于 测试。 1.2 字符 相关 -- dual用于测试 select * from dual; -- 1.字符串连接 select concat('aa','12') from dual; select 'aa'||'12' from dual; -- 2.首字母大写 select initcap('abc') from dual; --- 把大写转化小写 select lower('ABc') from dual; select upper('abc') from dual; -- 把所有员工的姓名小写输出 select lower(e.ename),e.empno from emp e -- 3.填充字符lpad/rpad select lpad('sxt',5,'*') from dual; select rpad('sxt',5,'*') from dual; -- 4.去掉空白字符

sql查询语句并不是最先执行SELECT

孤者浪人 提交于 2020-01-24 21:05:53
很多的SQL查询语句都是以SELECT关键字开始的,所以我们很容易会以为SQL查询语句就是最先执行的SELECT。不过,当我尝试跟别人解释什么是窗口函数的时候,针对是否可以对窗口函数返回的结果进行过滤这个问题,最终得出的结论是窗口函数的执行必须在WHERE子句和GROUP BY子句之后,所以不能对窗口函数返回的结果进行再次过滤。于是我又想到了另一个问题:SQL查询的执行顺序究竟是怎样的? 这个问题好像应该很好回答,毕竟自己已经写了成千上万个SQL查询了,其中的一些还很复杂。但事实是,我仍然很难确切地说出它的顺序是怎样的。 SQL查询语句的执行顺序 于是我研究了一下,发现在SQL语句的执行顺序中,SELECT并不是最先执行的,而是在第五个。 上面这张图与SQL查询语句的语义有关,能让你知道一个查询会返回什么,并回答了以下这些问题: 1.可以在GROUP BY之后使用WHERE吗?(不行,WHERE是在GROUP BY之前!) 2.可以对窗口函数返回的结果进行过滤吗?(不行,窗口函数是SELECT语句里,而SELECT是在WHERE和GROUP BY之后) 3.可以基于GROUP BY里的东西进行ORDER BY吗?(可以,ORDER BY基本上是在最后执行的,所以可以基于任何东西进行 ORDER BY) 4.LIMIT是在什么时候执行?(在最后!)

SQL Server——存储过程

核能气质少年 提交于 2020-01-24 20:51:09
我想从下面几个方面大概的讲述下存储过程,可能有些知识点是你没有注意的,也可能有些知识点我不知道,欢迎大家指点指点。如有不足,欢迎指教! 存储过程概念 存储过程优点 存储过程的接口 存储过程的解析、编译过程 存储过程安全性 查看存储过程 加密、解密存储过程 存储过程概念 存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中。用户通过指定存储过程的名字并给出参数(带参存储过程)来执行它。 存储过程优点 开发过程中使用存储过程的优点, 概括起来大体有下面一些: 1: 速度快、性能好。存储过程是一组已经编译过的SQL脚本,它已经进过解析、编译、优化器优化。调用存储过程可以 重复使用它的缓存执行计划。这样节省了解析、分析等所 需消耗的CPU资源。时间 2: 存储过程存储在数据库服务器,可以减少网络通信,减少网络阻塞。 调用存储过程只需存储过程名字和参数,从而避免了 把长串的SQL语句传送到SQL 服务器,可以大大减 轻网络负担。 3: 业务逻辑封装,可以把相当一部分业务逻辑封装到存储过程中,当业务逻辑变更的时候,只要接口不变,只需修改存储过程内部逻辑就OK了,避免了业务逻辑放在代码层,业务 逻辑变动改动大的痛苦。 4: 安全性 参数化的存储过程可以减少SQL Injiection攻击,而且可以通过检验参数、授予对象执行权限提高了安全性。

MySql主要性能指标说明

我怕爱的太早我们不能终老 提交于 2020-01-24 18:33:54
在项目当中数据库一般都会成为主要的性能与负载瓶颈,那么针对数据库各项性能指标的监控与对应的优化是开发与运维人员需要面对的主要工作,而且这部分的工作会贯穿项目从开发到运行的整个周期里。 这篇文章中我们对MySql数据库中的几个主要的性能指标的计算与统计进行下说明与总结。 在MySql中通过show global status可以得到很多的性能指标项,从中我们可以可以抽取需要关注的指标项: 1、CPU、内存使用率、磁盘占用空间 CPU、内存、磁盘这三项是我们能够看到的最直观的指标,也是MySql运行状态的整体体现,一旦我们的数据库服务器这三项出现不正常的波动,必然会影响项目的稳定与性能,从而就需要我们对项目与MySql进行合理配置与优化。 2 、创建的连接数、连接的连接数、连接缓存数、连接活跃数 Threads_created: 通过show global status like "Threads_created"可以查看已经创建的连接数,这个顾名思义就是MySql已经创建的总连接数; Threads_connectd: 通过show global status like "Threads_connectd"可以查看已经连接的连接数,这个值等于show processlist; Threads_catched: 通过show global status like "Threads