sql数据库

菜鸟Sql Server优化学习笔记(1) -读SQL Server2008查询性能优化

北战南征 提交于 2020-03-01 07:41:13
SQL Server2008查询性能优化笔记 第一章就说到了Sql Server性能杀手,其中第一条是低质量的索引。 他的前提是在硬件和操作系统都已经优化的情况下,我的服务器内存有12G,但是sql server才用到1G,先边看书边配置了。 低质量的索引这一点我感同身受,当时任务比较紧急,没有来得及记录数据。 总之,原来数据库根本没有索引,基本上服务器处于崩溃状态,Sql server CPU占用率100%。 由于很久没搞数据库,学校学习的那点东西都忘光了,重新回来,第一个找到了sql server查询分析器这个东东,把一些表加了索引,一下服务器就正常了,汗(我开始一直因为是程序insert太多的问题,正在写一个memcached的版本来替换,不过后续还是要做的)。 书是图书馆的,以后还了就找不到了,就到博客上做些记录吧。 性能杀手 1. 低质量的索引 2. 不精确的统计 3. 过多的阻塞和死锁 4.不基于数据集操作,通常是T-Sql游标 5.低质量的查询设计 6.低质量的数据库设计 7.过多的碎片 8.不可重用的执行计划 9. 低质量的执行计划,通常是因为参数嗅探所导致的 10.执行计划频繁重编译 11. 游标的错误使用 12. 数据库日志的错误配置 13. 过多使用或者错误配置tempdb 我已经在我的表上建立了索引,速度已经大大加快了,从CPU 占用99%,

python连接Mysql数据库

こ雲淡風輕ζ 提交于 2020-03-01 06:43:27
(1)首先需要安装pymysql库,命令行执行以下语句即可: pip install pymysql (2)创建表 import pymysql """ 1、连接本地数据库 2、建立游标 3、创建表 4、插入表数据、查询表数据、更新表数据、删除表数据 """ def create_table ( ) : #连接本地数据库 db = pymysql . connect ( host = 'localhost' , #数据库IP地址 port = 3306 , #数据库连接端口,默认是2206 user = 'root' , #数据库用户名 passwd = '123456' , #数据库用户密码 db = 'test_db' , #数据库名称 charset = 'utf8' ) #创建游标 cursor = db . cursor ( ) #新建一张student表,如果存在student表,则删除 cursor . execute ( "DROP TABLE IF EXISTS student" ) #创建student表 sql = """ create table student( id int not null, name char(10), age int, address char(20), create_time datetime) """ try : #

被关系数据库建表和升级折磨?因为你没用大道至简的Flyway

余生颓废 提交于 2020-03-01 04:12:15
前言 六年前Flyway已经是我TDD开发、持续集成工具栈中的重要一环了,作为早期用户,我早就应该为它做个”广告“,可惜对创业者来说时间太宝贵了,现在趁着疫情才有机会在家里总结点东西。虽然现在Flyway已经是Spring-Boot集成工具的一环,但是我发现还是少有人了解它的威力。 关系数据库之殇 你在使用关系数据库的过程中,是否曾经遇到以下情况,甚至因此一度想要放弃或已经放弃关系数据库? 场景一:开发环境,多人共用一套数据库 开发正调试着,忽然代码报错“XX字段不存在”:谁TMD又把表结构给改了… 场景二:开发环境,每个人各自搭建自己的数据库 开发完一个功能,提交代码、更新,重启准备调试下,代码报错“XX表不存在” 吼一嗓子:谁又改表结构了?什么?每个人都要把xxx.sql执行一遍? ... 新员工:我要搭一套开发数据库,到底应该执行哪些SQL脚本? 场景三:开发转测试 测试:你看这个功能是不是有个Bug? 开发1:哦,你要执行一下这个SQL脚本。 测试:嗯,现在没问题了,但是怎么保证这个脚本没有Bug,我能再重现、测试一遍吗? 开发:额~,你重新搭一遍数据库吧... 场景四:搭建一套演示环境 执行SQL脚本1、SQL脚本2、SQL脚本3…启动服务失败! 什么?这个脚本N是测试版本的,war包是已经上线的版本? 删库再来一遍... 场景五:放弃关系数据库的坑 受不了关系数据库了

Python Mysql 数据库操作

自闭症网瘾萝莉.ら 提交于 2020-03-01 02:42:10
本文实例讲述了python中MySQLdb模块用法。分享给大家供大家参考。具体用法分析如下: MySQLdb其实有点像php或asp中连接数据库的一个模式了,只是MySQLdb是针对mysql连接了接口,我们可以在python中连接MySQLdb来实现数据的各种操作。 python连接mysql的方案有oursql、PyMySQL、 myconnpy、MySQL Connector 等,不过本篇要说的确是另外一个类库MySQLdb,MySQLdb 是用于Python链接Mysql数据库的接口,它实现了 Python 数据库 API 规范 V2.0,基于 MySQL C API 上建立的。可以从:https://pypi.python.org/pypi/MySQL-python 进行获取和安装,而且很多发行版的linux源里都有该模块,可以直接通过源安装。 一、数据库连接 MySQLdb提供了connect方法用来和数据库建立连接,接收数个参数,返回连接对象: 复制代码 代码如下: conn=MySQLdb.connect(host="localhost",user="root",passwd="jb51",db="test",charset="utf8") 比较常用的参数包括: host:数据库主机名.默认是用本地主机 user:数据库登陆名.默认是当前用户 passwd

Perl与数据库DBI快速入门

北战南征 提交于 2020-02-29 22:25:12
Perl与数据库DBI快速入门 上次的文章 Perl无废话入门指南 中,简单的介绍了Perl的开发环境。为了完成提到的任务,还需要做几个知识点。无论是写脚本还是做CGI,如何使用Perl来访问数据库就是很有用的一个知识。 各种语言和开发环境访问数据库有各种不同的方式,比如可以用C和数据库提供的API接口来进行访问,也可以用JDBC、ODBC、ADO等封装好的统一接口来进行访问。Perl访问数据库最常用的包是DBI,可以在 www.cpan.org 找到。另外还需要安装对应数据库的驱动包,例如DBD::MySQL、DBD::Oracle、DBD::Sybase或者DBD::ODBC等。具体的安装方法请参考上期文章,在此就不赘述了。 下文以常见的MySQL为例,说说如何实现对数据库的操作。 1 基本流程 习惯在Windows下开发数据库、熟悉ADO、ADO.NET的朋友,一定对ADOConnection/ADODataSet/ADOTable等类耳熟能详。DBI的接口与之类似,但在操作方法上又有不同,对ADO熟悉的朋友不妨比较一下异同。一般来说,数据库操作由以下几个步骤组成一个常见的流程: 1. 建立一个数据库连接 2. 通过建立的数据库连接,执行SQL语句 3. 执行SQL后获取返回的数据集 4. 在数据集中对记录进行处理,一般是一个循环的过程 5. 处理完毕,关闭数据库连接

Google 搜索引擎语法

流过昼夜 提交于 2020-02-29 18:34:29
SQL注入详解 转发自 飞天小子 如有侵权请联系删除 1:什么是SQL注入 SQL注入是一种将SQL代码插入或添加到应用(用户)的输入参数中的攻击,之后再将这些参数传递给后台的SQL服务器加以解析并执行。 www.xx.com/news.php?id=1 www.xx.com/news.php?id=1 and 1=1 这里我们来理解一下SQL注入 首先,SQL注入常年蝉联OWASP排行榜第一名~ SQL注入产生的过程是怎样的呢?见下图 SQL注入的危害有哪些呢?   数据库信息泄露   网页篡改   网站被挂马   数据库被恶意操作   服务器被远程控制   破坏硬盘数据。。。。 2 我们来学习一下sql注入的方法 2.1取消友好HTTP错误消息 一般通过远程测试判断是否存在SQL注入,所以通常没有机会通过查看源代码来复查注入的查询结构。这导致经常需要通过推理来进行大量测试   打开IE浏览器,选择菜单“工具”->“Internet选项”对话框。   打开“高级”选项卡,在设置列表中找到“浏览”组,   取消勾选”显示友好HTTP错误信息”复选框 。如下图 2.2寻找SQL注入 最常用的SQL注入判断方法,在网站中寻找如下形式的网页   www.chinaliancheng.com/*.asp?id=1    www.chinaliancheng.com/*.aspx?id=1

01.MyBatis入门

穿精又带淫゛_ 提交于 2020-02-29 17:59:37
MyBatis入门: 第一天接触Mybatis,总结一下入门案例的流程: 首先导入Mybatis的jar包和数据库的驱动包 1.创建数据表和实体类 2.创建一个表和实体类映射的xml配置文件,具体配置如下: 1 <?xml version="1.0" encoding="UTF-8"?> 2 <!DOCTYPE mapper 3 PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 4 "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> 5 <!-- namespace是映射文件的一个唯一标识,用来定位是哪个映射文件 --> 6 <mapper namespace="com.offcn.entity.personMapper"> 7 <!-- id是一条sql语句的唯一标识,parameterType是sql语句中的参数类型 ,resultType是sql语句将要返回的结果的类型 --> 8 <!-- 如果输入的类型是基本数据类型(八种基本数据类型 + string)则#{xxx}可以随意写,但是为了规范最好不要,如果不是基本数据类型则必须写实体类中的字段名 --> 9 <select id="selectPersonById" parameterType="int" resultType="com

sql Server 索引优化

懵懂的女人 提交于 2020-02-29 17:46:20
sql Server 索引优化 聚集索引 , 表中存储的数据按照索引的顺序存储 , 检索效率比普通索引高 , 但对数据新增 / 修改 / 删除的影响比较大 非聚集索引 , 不影响表中的数据存储顺序 , 检索效率比聚集索引低 , 对数据新增 / 修改 / 删除的影响很小 如何让你的 SQL 运行得更快 ---- 人们在使用 SQL 时往往会陷入一个误区,即太关注于所得的结果是否正确,而忽略 了不同的实现方法之间可能存在的性能差异,这种性能差异在大型的或是复杂的数据库 环境中(如联机事务处理 OLTP 或决策支持系统 DSS )中表现得尤为明显。笔者在工作实践 中发现,不良的 SQL 往往来自于不恰当的索引设计、不充份的连接条件和不可优化的 whe re 子句。在对它们进行适当的优化后,其运行速度有了明显地提高!下面我将从这三个 方面分别进行总结: ---- 为了更直观地说明问题,所有实例中的 SQL 运行时间均经过测试,不超过1秒的均 表示为( < 1 秒)。 ---- 测试环境 -- ---- 主机: HP LH II ---- 主频: 330MHZ ---- 内存: 128 兆 ---- 操作系统: Operserver5.0.4 ---- 数据库: Sybase11.0.3 一、不合理的索引设计 ---- 例:表 record 有 620000 行,试看在不同的索引下,下面几个

SQL SERVER性能优化

北战南征 提交于 2020-02-29 16:47:30
1、 用程序中,保证在实现功能的基础上,尽量减少对数据库的访问次数;通过搜索参数,尽量减少对表的访问行数,最小化结果集,从而减轻 网络 负担;能够分开的操作尽量分开处理,提高每次的响应速度;在数据窗口使用SQL时,尽量把使用的索引放在选择的首列;   算法的结构尽量简单;在查询时,不要过多地使用通配符如SELECT * FROM T1语句,要用到几列就选择几列如:SELECT COL1,COL2 FROM T1;在可能的情况下尽量限制尽量结果集行数如:SELECT TOP 300 COL1,COL2,COL3 FROM T1,因为某些情况下用户是不需要那么多的数据的。不要在应用中使用数据库游标,游标是非常有用的工具,但比使用常规的、面向集的SQL语句需要更大的开销;按照特定顺序提取数据的查找。   2、 避免使用不兼容的数据类型。例如float和int、char和varchar、binary和varbinary是不兼容的。数据类型的不兼容可能使优化器无法执行一些本来可以进行的优化操作。例如: SELECT name FROM employee WHERE salary > 60000   在这条语句中,如salary字段是money型的,则优化器很难对其进行优化,因为60000是个整型数。我们应当在编程时将整型转化成为钱币型,而不要等到运行时转化。   3、

动态sql语句基本语法

纵饮孤独 提交于 2020-02-29 15:05:02
1 :普通SQL语句可以用Exec执行 eg: Select * from tableName Exec ( ' select * from tableName ' ) Exec sp_executesql N ' select * from tableName ' -- 请注意字符串前一定要加N 2:字段名,表名,数据库名之类作为变量时,必须用动态SQL eg: declare @fname varchar ( 20 ) set @fname = ' FiledName ' Select @fname from tableName -- 错误,不会提示错误,但结果为固定值FiledName,并非所要。 Exec ( ' select ' + @fname + ' from tableName ' ) -- 请注意 加号前后的 单引号的边上加空格 当然将字符串改成变量的形式也可 declare @fname varchar ( 20 ) set @fname = ' FiledName ' -- 设置字段名 declare @s varchar ( 1000 ) set @s = ' select ' + @fname + ' from tableName ' Exec ( @s ) -- 成功 exec sp_executesql @s -- 此句会报错 declare @s