sql
文章平均质量分 91
果然如此
这个作者很懒,什么都没留下…
展开
-
MySQL索引详解
一、什么是索引? 索引是对数据库表中的一列或多列值进行排序的一种结构,使用索引可以快速访问数据库表中的特定信息。二、索引的作用? 索引相当于图书上的目录,可以根据目录上的页码快速找到所需的内容,提高性能(查询速度)三、优点:通过创建唯一性索引,可以保证数据库表中的每一行数据的唯一性。 可以加快数据的检索速度 可以加速表与表之间的连接 在使用分组和排序进行...原创 2020-02-19 22:15:12 · 170 阅读 · 0 评论 -
MySQL索引原理
为什么使用B-Tree(B+Tree)上文说过,红黑树等数据结构也可以用来实现索引,但是文件系统及数据库系统普遍采用B-/+Tree作为索引结构,这一节将结合计算机组成原理相关知识讨论B-/+Tree作为索引的理论基础。一般来说,索引本身也很大,不可能全部存储在内存中,因此索引往往以索引文件的形式存储的磁盘上。这样的话,索引查找过程中就要产生磁盘I/O消耗,相对于内存存取,I/O存取的消耗...转载 2020-01-12 20:48:33 · 149 阅读 · 0 评论 -
SQLServer找出执行慢的SQL语句
SELECT ( total_elapsed_time / execution_count ) / 1000 N'平均时间ms' , total_elapsed_time / 1000 N'总花费时间ms' , total_worker_time / 1000 N'所用的CPU总时间ms' , total_physical_reads N'物转载 2015-07-23 12:55:10 · 669 阅读 · 0 评论 -
查询索引碎片
SELECT index_type_desc,alloc_unit_type_desc,avg_fragmentation_in_percent,fragment_count,avg_fragment_size_in_pages,page_count,record_count,avg_page_space_used_in_percentFROM sys.dm_db_index_physical转载 2015-11-27 16:58:58 · 747 阅读 · 0 评论 -
通过非聚集索引让select count(*) from 的查询速度提高几十倍、甚至千倍
通过非聚集索引,可以显著提升count(*)查询的性能。有的人可能会说,这个count(*)能用上索引吗,这个count(*)应该是通过表扫描来一个一个的统计,索引有用吗?不错,一般的查询,如果用索引查找,也就是用Index Seek了,查询就会很快。 之所以快,是由于查询所需要访问的数据只占整个表的很小一部分,如果访问的数据多了,那反而不如通过表扫描来转载 2015-11-27 17:30:56 · 537 阅读 · 0 评论 -
索引碎片整理
索引碎片整理 一碎片种类1 内部碎片,又称为平均页密度。是指索引正在占有超过它实际所需的空间大小。它具有两面型:低百分比会对读取数据的查询产生负面影响,会涉及更多读取操作,因为如果页被填充满的话,只需读取更少的页;另一方面,如果如果在创建索引时设置一个较低的填充因子,就可以避免当插入更多记录而不必进行页拆分。对应sys.dm_db_index_physical_stat转载 2015-11-27 15:06:53 · 878 阅读 · 0 评论 -
索引优化
CREATE proc [dbo].[sp_index] @table varchar(200)=''as declare @database varchar(200)=DB_NAME() declare @dbid int= db_id() declare @sql nvarchar(max)='' set @sql='select top 50 objectname=objec原创 2015-11-27 13:39:51 · 400 阅读 · 0 评论 -
查询索引中的碎片和重建SQL server索引
无论何时对基础数据执行插入、更新或删除操作,SQL Server 数据库引擎都会自动维护索引。随着时间的推移,这些修改可能会导致索引中的信息分散在数据库中(含有碎片)。当索引包含的页中的逻辑排序(基于键值)与数据文件中的物理排序不匹配时,就存在碎片。碎片非常多的索引可能会降低查询性能,导致应用程序响应缓慢。下面是一些简单的查询索引的sql。MSSQL的 DBA_Huangzj 提供。判断无用的索引转载 2015-11-10 10:56:37 · 1285 阅读 · 0 评论 -
第十章——维护索引(5)——查找丢失索引
前言:在开发阶段,很难总是可以在合适的列上创建合适的索引。所以一开始创建的索引可能会无效,此时,需要找出这些无效的索引。一般来说,当一个查询执行的时候,SQLServer优化器会选择最适合的索引进行执行,当没有找到合适的索引话,优化器会产生一个次优执行计划,并且把丢失索引的信息存放到DMVs上。当SQLServer服务重启后,所以存储在DMVs上的信息都会丢失,所以最好在正转载 2015-11-27 10:44:03 · 470 阅读 · 0 评论 -
根据表名得到表信息,包括字段说明,生成C#类属性
/********************************************* 根据表名得到表信息,包括字段说明,生成C#类属性 ********************************************/ Create PROC [dbo].[sp_help_table] (@tableName VARCHAR(200), @ColumnLike V原创 2016-01-25 15:44:50 · 1762 阅读 · 0 评论 -
sql server函数实现把分隔字符串转成表格
1.CREATE FUNCTION [dbo].[GetTableFromString] ( -- Add the parameters for the function here @sourceStr nvarchar(max) )RETURNS @Table_NameList table ( Name Varchar(max)) -- 建立表变量 ASBEGIN Dec原创 2015-12-09 16:15:41 · 1589 阅读 · 0 评论 -
sql大数据多条件查询索引优化
此优化的前提可以称之为最近流行的头条人物“许三多”,总数据多,查询条件多,返回列多优化前分页查询内部select列为需要的全部列,优化后内部select只返回ID主键,外部查询关联原数据表,然后查出所需要的列优化前:select t.* from ( select r.* ,row_number() over(order by r.id desc) row from原创 2016-09-23 14:31:44 · 4382 阅读 · 3 评论 -
SQL获取本周、本月、本年时间段值
–获取本周时间段值 SELECT DATEADD(WK,DATEDIFF(WK,0,GETDATE()),-1) SELECT DATEADD(WK,DATEDIFF(WK,0,GETDATE()),6) –获取本月时间段值 SELECT DATEADD(MM,DATEDIFF(MM,0,GETDATE()),0) SELECT DATEADD(MS,-3,DATEADD(MM,DATE转载 2017-06-21 13:05:19 · 633 阅读 · 0 评论 -
sql server 2012 删除数据恢复ApexSQLLog 2016
2017.612星期一,今天误删除了一个表的1万多条数据,数据库sql server 2012,网上找了很多恢复方法,因为没有备份,只能借助第三方工具,另外,就算有备份也无法使用,因为这个表是实时插入的,备份不可能跟上插入速度。想到的恢复原理是通过数据库log恢复,百度了很多个软件,有个只支持sql server低版本,最后找到了ApexSQLLog安装试用版发现有条数限制,又找到了ApexS原创 2017-06-15 17:03:58 · 4647 阅读 · 0 评论 -
sql 临时表代替left join提高性能
L表数据量:77179753J表数据量:42201原表left join :select count(1) from l left join j on j.userID=l.userid where l.appID=1000 and l.loginTime>='2018-01-01' and l.loginTime<'2018-02-01' 等半天不出结果!临原创 2018-02-02 11:02:41 · 6211 阅读 · 0 评论 -
sql 删除重复数据,保留重复最小ID
select * from testID Name1 a2 b3 a4 b5 c6 d-- --标准sql方法:mysql、sql server---- 查询重复 方法一select t.id,t.name from test t join( select min(id) id,name from test group by name having(count(1)>1)) tt o...原创 2018-03-09 17:36:46 · 4905 阅读 · 1 评论 -
SQLyog连接数据库报错plugin caching_sha2_password could not be loaded
打开cmd:mysql -uroot -p进入mysql依次执行下面语句ALTER USER 'root'@'localhost' IDENTIFIED BY 'password' PASSWORD EXPIRE NEVER; #修改加密规则ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY ...转载 2019-05-07 22:55:54 · 385 阅读 · 0 评论 -
第十章——维护索引(6)——查找无用索引
前言:众所周知,索引对性能的提升有巨大作用。但是这是有代价的,索引需要磁盘空间来存放它的B-Tree,并且用于在每次DML执行后更新信息,所以应该在一定时期内检查有无无用索引。 准备工作:记住别在重启服务器之后进行信息收集,因为DMO将会清空,而数据会非常不准确甚至是错误的。所以应该在运行了一段时间后(业务周期)再做收集。业务周期根据实际情况而定。转载 2015-11-27 10:45:18 · 599 阅读 · 0 评论 -
查询数据库索引使用情况
SELECT @@SERVERNAME AS [ServerName] , DB_NAME() AS [DatabaseName] , SCHEMA_NAME([sObj].[schema_id]) AS [SchemaName] , [sObj].[name] AS [ObjectName] , CASE WHEN [sObj].转载 2015-11-27 10:42:44 · 408 阅读 · 0 评论 -
把逗号分隔的列拆成多行 cross APPLY
Create FUNCTION [dbo].[GetTableFromString] ( -- Add the parameters for the function here @sourceStr nvarchar(max) )RETURNS @Table_NameList table ( Name Varchar(max)) -- 建立表变量 ASBEGIN Declare原创 2015-12-09 16:05:11 · 974 阅读 · 0 评论 -
SQLServer 存储过程中不拼接SQL字符串实现多条件查询
<br />以前拼接的写法<br />set @sql=' select * from table where 1=1 '<br />if (@addDate is not null) <br /> set @sql = @sql+' and addDate = '+ @addDate + ' ' <br />if (@name <>'' and is not null) <br /> set @sql = @sql+ ' and name = ' + @name + ' '<br />e原创 2011-02-28 17:17:00 · 1160 阅读 · 0 评论 -
影响sql 效率 详解
<br />1 尽量不要在where中包含子查询; <br /><br /> 关于时间的查询,尽量不要写成:where to_char(dif_date,'yyyy-mm-dd')=to_char('2007-07-01','yyyy-mm-dd'); <br /><br /> 2在过滤条件中,可以过滤掉最大数量记录的条件必须放在where子句的末尾; <br /><br /> FROM子句中写在最后的表(基础表,driving table)将被最先处理,在FROM子句中包含多个表的情况下,你必须原创 2011-02-28 17:47:00 · 881 阅读 · 0 评论 -
SQL语句大全
<br />--语 句 功 能<br />--数据操作<br />SELECT --从数据库表中检索数据行和列<br />INSERT --向数据库表添加新数据行<br />DELETE --从数据库表中删除数据行<br />UPDATE --更新数据库表中的数据<br />--数据定义<br />CREATE TABLE --创建一个数据库表<br />DROP TABLE --从数据库中删除表<br />ALTER TABLE --修改数据库表结构<br />CREATE VIEW --创建一个视图<b转载 2011-05-13 22:35:00 · 456 阅读 · 0 评论 -
SQL Server中 临时表 与 表变量的区别 1
<br />什么情况下使用表变量?什么情况下使用临时表?<br />表变量: <br /> DECLARE @tb table(id int identity(1,1), name varchar(100)) <br /> INSERT @tb <br /> SELECT id, name<br /> FROM mytable <br /> WHERE name like ‘zhang%’ <br /> <br />临时表: <br /> SELECT name, addre原创 2011-05-16 11:56:00 · 509 阅读 · 0 评论 -
SQL Server 表变量与临时表区别
<br />问题 1:为什么在已经有了临时表的情况下还要引入表变量?<br />解答 1:与临时表相比,表变量具有下列优点: • 如 SQL Server 联机丛书“表”(Table) 一文中所述,表变量(如局部变量)具有明确定义的范围,在该范围结束时会自动清除这些表变量。 <br />• 与临时表相比,表变量导致存储过程的重新编译更少。 <br />• 涉及表变量的事务仅维持表变量上更新的持续时间。因此,使用表变量时,需要锁定和记录资源的情况更少。因为表变量具有有限的范围并且不是持久性数据库的一部分,所以原创 2011-05-16 12:00:00 · 542 阅读 · 0 评论 -
C# lock,Monitor 介绍。(多线程并发控制)
这里介绍C# lock关键字它可以把一段代码定义为互斥段(critical section),互斥段在一个时刻内只允许一个线程进入执行,而其他线程必须等待。<br /> <br />C#语言有很多值得学习的地方,这里我们主要介绍C# lock关键字,包括介绍Monitor 类锁定一个对象等方面。<br />C#提供了一个lock关键字,它可以把一段代码定义为互斥段(critical section),互斥段在一个时刻内只允许一个线程进入执行,而其他线程必须等待。在C#中,C# lock关键字定义如下原创 2011-04-10 02:04:00 · 570 阅读 · 0 评论 -
SQL2005中的事务隔离级别
首先说明一下数据库中数据一致性的几个问题,包括脏读(Dirty reads),丢失更新(Lost updates),不可重复读(Nonrepeatable reads),幻象(Phantoms)。 脏读(Dirty reads):是指读取到未提交的数据。一个进程修改数据,而另一个进程在修改数据进程未提交之前读取了数据。这样第二个进程读取到了不一致的数据。丢失更新(Lost updates):一个进程读取数据,在原数据的基础上做了一些计算处理,然后将原数据更新为计算后的数据。如果有多个进程来进行这样的操作,一原创 2011-04-10 00:56:00 · 472 阅读 · 0 评论 -
SQL Server中四类事务并发问题的实例再现
<br />本篇文章将用实例再现数据库访问中四类并发问题,希望能让初学者能对事务的并行性有进一步的理解。<br /> 首先,让我们先来了解一下并行问题以及事务隔离级别这两个概念。<br />在数据库中,假设如果没有锁定且多个用户同时访问一个数据库,则当他们的事务同时使用相同的数据时可能会发生问题。并发问题包括: <br />丢失或覆盖更新。 未确认的相关性(脏读)。 不一致的分析(非重复读)。 幻像读。 <br />下面让我们稍花点时间来解释一下这四类问题:<br />1、丢失更新<br />当两个或多原创 2011-04-10 23:15:00 · 548 阅读 · 0 评论 -
SQL2005中因为删除大量数据,导致事务日志增大
<br />因为一个表里有大概500万条记录,Detele的时候发现居然删不掉了。就看到log文件逐渐变大。最后出错。<br />查了下,发觉DELETE命令貌似没有什么without transaction之类的参数可选,你只要delete就会有log。<br /> <br /> <br />--当然,实际操作前,要先压缩日志及数据库文件大小 <br /> <br /> /*--特别注意 <br /> 请按步骤进行,未进行前面的步骤,请不要做后面的步骤 <br /> 否则可能损坏你原创 2011-04-10 23:26:00 · 917 阅读 · 0 评论 -
什么是索引视图
<br />多年以来,Microsoft® SQL Server™ 一直支持创建称为视图的虚拟表。通常,这些视图的主要作用是:<br />•<br />提供一种安全机制,将用户限制到一个或多个基表的某个数据子集中。<br />•<br />提供一种机制,允许开发人员自定义用户通过逻辑方式查看存储在基表中的数据的方式。<br />通过 SQL Server 2000,SQL Server 视图的功能得到了扩展,实现了系统性能方面的收益。可在视图上创建唯一的聚集索引及非聚集索引,来提高最复杂的查询的数据访问性能原创 2011-04-15 19:20:00 · 2697 阅读 · 0 评论 -
SQL Server CLR 极速入门,启用、设计、部署、运行
先总结:SQL Server CLR 设计简单,部署方便,效率很高,很安全,随数据库移动。测试用例,视频演示在此下载:http://download.csdn.net/source/2279319环境:SQL Server 2005/2008,Visual Studio 2005/2008在SQL Server里启用CLR:在SQL Server里执行以下命名,来启用CLR原创 2011-06-16 16:18:00 · 1014 阅读 · 1 评论 -
生成表insert into语句的存储过程
CREATE PROC [dbo].[proc_insert] ( @tablename VARCHAR(256) , @where NVARCHAR(MAX) = '' )AS BEGIN SET nocount ON DECLARE @sqlstr VARCHAR(4000) DECLARE @s转载 2015-08-18 09:41:15 · 693 阅读 · 0 评论 -
数据库性能优化一:SQL索引一步到位
SQL索引在数据库优化中占有一个非常大的比例, 一个好的索引的设计,可以让你的效率提高几十甚至几百倍,在这里将带你一步步揭开他的神秘面纱。 1.1 什么是索引? SQL索引有两种,聚集索引和非聚集索引,索引主要目的是提高了SQL Server系统的性能,加快数据的查询速度与减少系统的响应时间 下面举两个简单的例子:图书馆的例子:一个图书馆那么多书,怎么管理呢?建转载 2015-11-10 12:35:51 · 4119 阅读 · 0 评论 -
运行缓慢的查询语句 监测索引的使用
另外一个影响查询性能的因素跟DML查询已经删除,插入以及更改数据的查询有关。在指定表上创建的索引越多,更改数据时需要占用的资源也就越多。当事务之间存在锁的组合时,较长的更改操作会破坏并发性。结果,所以,了解哪个索引被应用程序超时使用就显得很重要。然后你就可以指出是否在数据库中结构中存在着从未被使用过的索引。 SQL Server2008提供了sys.dm_db_usage_stats D转载 2015-11-10 12:45:08 · 1206 阅读 · 0 评论 -
数据库性能优化二:数据库表优化
优化①:设计规范化表,消除数据冗余 数据库范式是确保数据库结构合理,满足各种查询需要、避免数据库操作异常的数据库设计方式。满足范式要求的表,称为规范化表,范式产生于20世纪70年代初,一般表设计满足前三范式就可以,在这里简单介绍一下前三范式先给大家看一下百度百科给出的定义:第一范式(1NF)无重复的列 所谓第一范式(1NF)是指在关系模型中,对域添加的一个规范要求,所有的域都应转载 2015-11-10 12:36:40 · 406 阅读 · 0 评论 -
数据库性能优化三:程序操作优化
概述:程序访问优化也可以认为是访问SQL语句的优化,一个好的SQL语句是可以减少非常多的程序性能的,下面列出常用错误习惯,并且提出相应的解决方案 一、操作符优化 1. IN、NOT IN 操作符 IN和EXISTS 性能有外表和内表区分的,但是在大数据量的表中推荐用EXISTS 代替IN 。 Not IN 不走索引的是绝对不能用的,可以用NOT E转载 2015-11-10 12:37:45 · 347 阅读 · 0 评论 -
如何把exists 改为 left join
or方法:SELECT top 10 * FROM tWHERE (PlanName LIKE '%关键字%' OR remark LIKE '%关键字%' OR exists(SELECT pp.tpID FROM pp JOIN points (NOLOCK) p ON p.id = pp.pointID where p.PointName LIKE原创 2015-08-14 17:32:35 · 2585 阅读 · 0 评论 -
Sqlserver2005日志文件太大,使其减小的方法
Sqlserver2005日志文件太大,使其减小的方法: 运行下面的三行 dbName为数据库名:backup log dbNamewith NO_LOGbackup log dbNamewith TRUNCATE_ONLYDBCC SHRINKDATABASE(dbName)我的日志文件减小到1MB转载 2009-04-16 09:24:00 · 777 阅读 · 0 评论