SQL里面的排序语句desc和ASC有什么区别(ascdesc排序)
desc是倒序,asc是正序比如select*fromtableorderbyidasc这样就是从id由小到大的顺序排列,如果是desc则是由大到小排列了,另外,如果最后不写asc,一般的数据库都默认为由小到大。
SQLite PRAGMA是干嘛的?作用是?
PRAGMA command 是一个特殊的命令。 它用于修改 SQLite 库操作或查询库以取得内部(非表)数据。 PRAGMA 命令可以使用与其它 SQLite 命令(如 SELECT、INSERT) 相同的接口,只在有如下几个重要方面有所不同:pragma 接受一个整数值 value 或一个名字符号。 字符串 "on ", "true " 以及 "yes " 与 1 是等价的。字符串 "off ", "false ", 和 "no " 则等价于 0 。 这些字符串是不区分大小写的,也不需要双引号。 不能识别的字符串将被认为是 1 , 而不会提示错误。 当返回 value 时,它被看作是一个整数。PRAGMA auto_vacuum; PRAGMA auto_vacuum = 0 | none | 1 | full | 2 | incremental ;在数据库中查询或设置 auto-vacuum 。通常(也就是说在 auto_vacuum 是 0 或 none的时候), 当一个从数据库中删除数据的事务提交时,数据库文件大小不会改变, 未被使用的数据库文件页空间被记入一个“空闲列表”中, 这样,这些空间在以后的 INSERT 中就可以重用。所以, 数据库文件不会缩小。 在这种模式下,可以使用VACUUM 命令来回收未用的空间。如果 auto-vacuum 标志是 1 (full,完全模式),空闲列表中的页将会移到文件的尾部, 那么,当每次提交事务时,就可以通过将文件截断来翻译空闲列表中的页。 但请注意, auto-vacuum 只会从数据库文件中载断空闲列表中的页, 而不会回收数据库中的碎片,也不会像VACUUM 命令那样重新整理数据库内容。实际上,由于需要在数据库文件中移动页, auto-vacuum 会产生更多的碎片。要使用 auto-vacuum,需要一些前题条件。 数据库中需要存储一些额外的信息以记录它所跟踪的每个数据库页都找回其指针位置。 所以,auto-vacumm 必须在建表之前就开启。在一个表创建之后, 就不能再开启或关闭 auto-vacumm。如果 auto-vacuum 的值是 2 (incremental,增量模式) ,那么,自动 vacuum 需要使用存放在数据库文件中的另外的信息。但它不会像 auto_vacuum == full 那样在每次事务提交的时候发生。在增量模式下,必须使用独立的 incremental_vacuum pragma 来引发 vacuum。数据库连接可以自由地在完全和增量模式间切换。但是, 如果数据库中已经建了一个表,连接就不能切换到 none 模式, 也不能从 none 模式切换成别的模式。PRAGMA cache_size; PRAGMA cache_size = Number-of-pages ;查询可修改 SQLite 一次可以在内存中保持的数据库磁盘页数量的最大值。 每一页大约需要 1.5K 的内存空间。缺省值是2000。 如果你需要做大的 UPDATE 或 DELETE 操作,每次会影响相当多的数据库行, 并且你也不在乎 SQLite 占用更多的内存,那么,你就可以增加缓存的大小, 这样,以获得可能的速度的提升。当你使用 cache_size pragma 修改缓存大小以后, 改变只会对当前的会话起作用。数据库连接关闭并重新连接后, 它又会变成缺省的大小。如果要永久修改缓存值,则需要使用default_cache_sizePRAGMA case_sensitive_like; PRAGMA case_sensitive_like = 0 | 1 ;对于 latin1 字符,LIKE 操作符缺省的行为会忽略大小写。 也就是说,默认情况下, "a" LIKE "A" 的结果是true。 可以通过开启该 pragma 来改变这种行为。当启用 case_sensitive_like 后,"a" LIKE "A" 会是 false 但 "a" LIKE "a" 仍然是 true.PRAGMA count_changes; PRAGMA count_changes = 0 | 1 ;查询或修改 count-changes 标志。通常, 没有设置 count-changes ,则 INSERT, UPDATE 和 DELETE 语句不会返回任何数据。 当设置该值时,这些命令都会返回由一个整数组成的一行数据, 该整数表示被该命令所插入,修改或删除的行数, 但不包括任何由触发器插入、修改或删除的行。PRAGMA default_cache_size; PRAGMA default_cache_size = Number-of-pages ;查询或设置 SQLite 可在内存中同时保持的数据库磁盘文件页, 每占用 1K 磁盘空间的页需要大约 1.5K 的内存。 该 pragma 类似cache_size 。 只是,它会永久改变缓存的值。通过该 pragma, 可以一次设置缓存值,以后每次后新打开数据库时都将使用该值。PRAGMA default_synchronous;该 pragma 在 2.8 版本中可用,但在 3.0 中删除了。 使用它非常危险,因此也不推荐使用。 为帮助2.8版本的用户不再使用该 pragma, 本文档不会告诉你它怎么用。PRAGMA empty_result_callbacks; PRAGMA empty_result_callbacks = 0 | 1 ;查询或设置 empty-result-callbacks 标志。该标志只会影响 sqlite3_exec API。 通常,当清除该标志时,如果命令返回 0 行数据, 则不会引发用于 sqlite3_exec()上的回调函数。 但若在这种情况下设置了 empty_result_callbacks, 则回调函数会将第三个参数置为 0 (NULL) 并进行调用,且只会调用一次。 这可以使用调用 sqlite3_exec() API 的程序即使在没有返回数据的情况下也可以获得列名。PRAGMA encoding; PRAGMA encoding = "UTF-8"; PRAGMA encoding = "UTF-16"; PRAGMA encoding = "UTF-16le"; PRAGMA encoding = "UTF-16be";第一种格式,主数据库已创建。那么该 pragma 会返回主数据库所使用的文件编码。 可能是: "UTF-8", "UTF-16le" (小印第安 UTF-16 编码) 或 "UTF-16be" (大印第安 UTF-16 编码)。 如果主数据库没有创建, 那么返回值将是将要用于创建主数据库的文本编码(如果在当前会话中创建的话)。第二种以及以后的格式只有在主数据库未创建时有用。 在这种情况下,该 pragma 将会把数据库编码设为在当前会话中将要创建的数据库所使用的编码。 字符串“UTF-16”会被解释为“本机字节顺序的UTF-16编码”。 若第二种及以后的格式用于已创建的数据库文件上, 则它们会被默默地忽略而不起任何作用。一旦为数据库设置了字符编码,就不能再更改。使用 ATTACH 命令创建的数据库记录使用与主数据相同的编码。PRAGMA full_column_names; PRAGMA full_column_names = 0 | 1 ;查询或修改 full-column-names 标志。 该标志会影响当 SELECT 查询后面的列表是一个 “表-列名” 或 “*”时 SQLite返回列名的方式。通常, 如果 SELECT 语句连接两个或多个表, 结果列名将是 <表名/别名><列名>; 而若仅仅对单个表查询时,将是 <column-name>。 但如果设置了 full-column-names 标志,列名将永远是 <table-name/alias> <column-name> , 而不管是只查询一个表或同时连接多个表。如果 short-column-names 和 full-column-names 都设置了, 则会以 full-column-names 为准。PRAGMA fullfsync PRAGMA fullfsync = 0 | 1 ;查询修改 fullfsync 标志。 该标志影响在支持 F_FULLFSYNC 同步方法的系统上,是否使用该方法。 默认值是 off (不使用)。 在写本文的时候 (2006-02-10),只有 Mac OS X 支持 F_FULLFSYNC。PRAGMA incremental_vacuum (N) ;Incremental_vacuum pragma 会导致从空闲列表中最多移除 N 页。 数据库文件也会按该数量截断。如果数据库不在 auto_vacuum==incremental 模式, 或空闲列表中没有页,则该 pragma 不起作用。 如果空闲列表中不到N 页,那么,整个空闲列表会被清空。对于 3.4.0版来说 (第一个支持 incremental_vacuum 的版本) , 该我仍然是试验性的。未来可能会增强该功能,包括像 VACUUM 命令那样整理碎片以及节点重整等。 并且,增量 vacuum 可能会从 pragma 变为一个单独的 SQL 命令, 也许会是 VACUUM 命令的变体。程序员们要注意不要迷恋于当前的语法, 因为以后有可能会改变。PRAGMA legacy_file_format; PRAGMA legacy_file_format = ON | OFF本 pragma 设置或查询 legacy_file_format 标志的值。 当它为 on 时,新创建的数据库文件格式可以被3.0.0以后的版本读写。 如果它为 off,则会使用最新的数据库文件格式,旧版本的SQLite将无法读写。当不带参数使用该 pragma 时,它返回该标志当前的值。 它 不 会 告诉你当前数据库所使用的文件格式, 而只会表明在以后创建新数据库时将使用何种格式。该标志只对新创建数据库有效。对已存在的数据库不起作用。PRAGMA locking_mode; PRAGMA locking_mode = NORMAL | EXCLUSIVE该 pragma 设置或查询数据库连接的锁模式。 锁模式可能是 NORMAL 或 EXCLUSIVE.在 NORMAL 模式下, (默认值), 一个数据库连接会在每次完成读或写时释放数据库文件锁。 当锁模式设为 EXCLUSIVE 时,数据库连接永远不会释放文件锁。 在该模式下,当第一次读数据库文件时,会获得并持有一个共享锁。 当第一次向数据库写时,将获得并持有一个排它锁。在 EXCLUSIVE 模式下获得的锁可以通过关闭数据库连接来释放, 也可以通过使用该 pragma 将锁模式改为 NORMAL,并且再次访问(读或写) 数据库来释放。仅仅将锁模式置为 NORMAL 是不够的, 直到下一次访问数据库文件时才会释放已持有的锁。有两种原因要求设置 EXCLUSIVE 锁模式。 一是一个应用程序确实不希望其它进程访问数据库文件。 二是在这种模式下可以使用优化器,它可以节省少量的磁盘文件操作。 这在嵌入式系统中可能非常重要。当 locking_mode pragma 指定一个特定的数据库时,如:PRAGMA main. locking_mode=EXCLUSIVE;那么,锁模式只会对该数据库有效。如果不指定数据库名称, 那么锁模式会应用于所有数据库,包括以后使用 ATTACH 命 令连接的数据库。临时( temp) 数据库 (用于存放临时表和索引)永远使用 EXCLUSIVE 锁模式。临时数据库的锁模式不能改变。所有其它的数据库则默认使用 NORMAL 锁模式,并可以通过使用 pragma 改变。PRAGMA page_size; PRAGMA page_size = bytes ;查询或设置数据库的 page-size 。只能在数据库创建之间设置 page-size。 页的大小必须是 2 的幂, 且幂指数只能在 512 和 8192 之间。 其上限可以在编译时通过修改源代码中的 SQLITE_MAX_PAGE_SIZE 修改, 但最大不能超过32768。PRAGMA max_page_count; PRAGMA max_page_count = N ;查询或设置数据库文件最大的页数。 两种格式都会返回最大的页数。第二种格式试图修改最大页数。 最大页数不能修改为小于当前数据库的大小。PRAGMA read_uncommitted; PRAGMA read_uncommitted = 0 | 1 ;查询,设置或清除 READ UNCOMMITTED (读未提义)隔离级别。 SQLite 默认的隔离级别是 SERIALIZABLE (可串行化)。 任何进程或线程都可以选择 READ UNCOMMITTED 级别。但除了在数据库连接间共享一个通过页和模式缓存外,仍然会使用 SERIALIZABLE 隔离级别。 共享缓存可以使用 sqlite3_enable_shared_cache() API 开启, 并且只能在执行同一线程的连接间开启。共享缓存默认是关闭的。PRAGMA short_column_names; PRAGMA short_column_names = 0 | 1 ;查询或修改 short-column-names 标志。 该标志会影响当 SELECT 查询后面的列表是一个 “表-列名” 或 “*”时 SQLite返回列名的方式。 通常, 如果 SELECT 语句连接两个或多个表, 结果列名将是 <表名/别名><列名>; 而若仅仅对单个表查询时,将是 <column-name>。 但如果设置了 short-column-names 标志,列名将永远是 <column-name> , 而不管是只查询一个表或同时连接多个表。如果 short-column-names 和 full-column-names 都设置了, 则以 full-column-names 标志为准。PRAGMA synchronous; PRAGMA synchronous = FULL; (2) PRAGMA synchronous = NORMAL; (1) PRAGMA synchronous = OFF; (0)查询或设置 synchronous 标志。 第一种格式返回一个整数,当 synchronous 为 FULL (2) 时, SQLite 数据库引擎将会在重要的时刻暂停, 以保证在继续运行之前数据确实已经写到磁盘上去了。 这能保证在遇到操作系统崩溃可电源故障时, 重新启动机器数据库文件不会被破坏。FULL 同步方式是非常安全的, 但也是很慢的。若 synchronous 设为 NORMAL,则 SQLite 数据库引擎将在大多数重要时刻暂停,但比在 FULL 模式要少。 在极少情况下,处理这种模式的数据库文件可能会由于“不是时候” 的电源故障而导致受损。但在实际应用中, 更有可有遭受到灾难性的磁盘故障或其它无法恢复的硬件故障。 若将 synchronous 设为 OFF (0),那么 SQLite 从操作系统取得数据后将会立即进行处理而不会暂停。 如果使用 SQLite 的应用程序崩溃,数据将是安全的。 但如果在数据写入磁盘之前,操作系统死机或机器断电, 数据库文件可能会损坏。此外,在该模式下, 某些操作会比其它情况下快 50 倍。在 SQLite 版本 2 中,默认值是 NORMAL。 对于版本 3, 默认值是 FULL。PRAGMA temp_store; PRAGMA temp_store = DEFAULT; (0) PRAGMA temp_store = FILE; (1) PRAGMA temp_store = MEMORY; (2)
正当防卫2的完美存档放在哪里?无论在我的文档里的Square Enix,还是在游戏安装目录的save文件夹下,放了网
正当防卫2存档文件目录位置如下放在游戏根目录里面存档文件名如下JustCause2Save00JustCause2Save01JustCause2Save02JustCause2Save03JustCause2Save04JustCause2Save05JustCause2Save06JustCause2Save07JustCause2Save08JustCause2Save09JustCause2Save10按键设置存档在我的文档【Square Enix】文件夹,注意:是按键设置在我的文档【Square Enix】文件夹。
mysql_table_prefix数据库表什么什么意思。在数据库怎么添加
没什么意思,就是一个变量名表示表的前缀一般MySQL里面都在在表前面添加一个前缀来区分表的作用。就是像FI项目用user表,就写成FI_user所以在有些系统中mysql_table_prefix=FI
sql server 2000 中有create schema, 如定义create schema klflsk,但是这个构架找不到,并且也不能用
sql server 没有schema的概念他的数据库是:服务器-->实例-->数据库-->(用户)-->表login是建立在实例下的用户是建立在数据库下的。每一个用户必须关联login,才能登录数据库,进行操作。每个数据库可以有多个用户。
sql插入数据时某字段+1
往a中插入的:insert into a(id) values((select right("00000000"+cast((max(c)+1) as varchar(10)),8) from b))b写回的就update b set c=c+1
各位大虾同仁们,小弟现在遇到一个Sybase IQ执行SQL的问题,在Sybase IQ 12.7的服务器上客户端上执行:
windows上换行符为: 。你试试ROW DELIMITED BY " " !
Roguelike塔防游戏《Dungeon Squad》iOS版正式推出
韩国游戏开发商 GameCoaster 近日宣布,在 App Store 上推出了 Roguelike 塔防游戏《Dungeon Squad》(ダンジョンスクワッド),Android 版则已于 10 月 7 日先行上市。 《Dungeon Squad》是一款具有 Roguelike 要素的塔防游戏,描述在一个英雄无休止入侵的世界中,恶魔们接连被消灭,地下城也成为了废墟,为了向英雄们反击,恶魔们尝试攻击英雄的据点,以重建支离破碎的魔界为目标。 玩家会透过反覆的战斗与选择来强化自己的恶魔队伍,并从英雄身上获取资源(例如金钱和武器)来提升等级和能力,玩家只需要操作一开始选择的恶魔来攻击英雄,后来加入的其他队友会进行自动攻击,每天的目的就是保护身后的魔法石不被英雄摧毁,要是魔法石被破坏该局游戏就会结束进到下一轮,特别的是游戏存在永久强化要素,可以用战斗中得到的货币来解锁各种项目。 该开发商在 2018 年时以《Dungeon Maker》(ダンジョンメーカー)获得不少玩家好评,除了随机强化要素和无限制的玩法以外,有点 H 的角色也是很大的卖点之一,在《Dungeon Squad》中也继承了这个要素,而且角色的细致程度又更上一层楼,除了每个恶魔都十分性感以外,俘虏的勇士们也会摆出挑逗的动作让人感到兴奋。 根据 GameCoaster 在 10 月 7 日的推文,游戏原定在那天于双平台上架,但 iOS 版因为审核时间过长决定延后发行日,玩家们推测可能是与角色露出度过大有关,而在 15 日上市的 iOS 版本中,部分角色造型进行了更改,象是可鲁贝洛斯(ケルベロス)与黑暗天马(ダークペガサス)从光腿改成了黑丝袜,虽然演出上进行了调整但未影响整体的游戏性,喜欢塔防游戏或是曾玩过前作的人不妨尝试看看喔!
金蝶k3 SQL3表查询问题
跟一个条件 z.FTranType=2 ,因为你生产领料单也是关联生产任务单生成的,所有出入库单据在icstockbill中,表中用FTranType字段来区分是材料入库还是产品入库还是销售出库还是生产领料
mysql 语句 每月最后一天数据
select * from tsrate_tj where date_format(ts_date,"%Y-%m-%d") in (LAST_DAY(STR_TO_DATE("2012-01","%Y-%m-%d")),LAST_DAY(STR_TO_DATE("2012-02","%Y-%m-%d")),LAST_DAY(STR_TO_DATE("2012-03","%Y-%m-%d")),LAST_DAY(STR_TO_DATE("2012-04","%Y-%m-%d")),LAST_DAY(STR_TO_DATE("2012-05","%Y-%m-%d")),LAST_DAY(STR_TO_DATE("2012-06","%Y-%m-%d")),LAST_DAY(STR_TO_DATE("2012-07","%Y-%m-%d")),LAST_DAY(STR_TO_DATE("2012-08","%Y-%m-%d")),LAST_DAY(STR_TO_DATE("2012-09","%Y-%m-%d")),LAST_DAY(STR_TO_DATE("2012-10","%Y-%m-%d")),LAST_DAY(STR_TO_DATE("2012-11,"%Y-%m-%d")),LAST_DAY(STR_TO_DATE("2012-12","%Y-%m-%d")) );当然了 in 里面的条件可以用程序循环拼出来,年和月 看你具体的业务需求;需要别的条件就 继续 and;至于你要查什么,把*换掉你想要的就OK了;分页的话 直接在后面加 LIMIT。希望能帮到你,望采纳!
PatriciaBusquets是什么职业
PatriciaBusquetsPatriciaBusquets是一名服装设计,代表作品有《Azulynotanrosa》、《Horamenos》等。外文名:PatriciaBusquets职业:服装设计代表作品:《Azulynotanrosa》、《Horamenos》等。合作人物:MiguelFerrari
sql server如何用print语句输出查询结果
declare @number intset @number=(select number from choice where studentnumber="20100001")print @number
SQL数据库修改表
1、首先你要保证你的两个表都有主键,或者有关联字段。例如:表A(id,name,date)id是主键表B(id,name,date)id是主键1)导入B数据数据到A表保留date字段值(确切的说这种情况应该叫利用【B】表数据更新【A】表数据),用下面的sql就可以达到目的:updateAsetA.date=(selectB.datefromBwhereB.id=A.id);说明:这样做的话要保证A表和B表都有数据并且id字段能够关联上,而且这样修改的数据只是关联上的数据,假设A表中有【id=1】的数据而B表中没有【id=1】的数据,那么A表中【id=1】的数据就不会被修改。2)如果A表和B表都没有主键的话,那么寻找一个能够关联两个表数据的字段(这个字段可以从一定意义上作为"主键"区分表中数据),假设是id和name字段联合起来:updateAsetA.date=(selectB.datefromBwhereB.id=A.idandB.name=A.name);说明:在这个更新中更新条目也只限定于能够关联上的数据。3)如果A表中没有数据只是想把B表中的数据全部插入A表(B表中date字段的值必须被保留的话)insertintoAselect*fromB;说明:在这个语句中,把B表中所有的数据不加修改的全部放入了B表,自然也就包含了date字段的值不变。insertintpAselect1,"张三",datefromB;说明:在这个语句中,把B表中的date字段的只保留,id和name字段分别换成了【1】和【张三】(当然是所有数据的id和name字段都换了)2、综合上面的观点1)如果表1没有数据:insertinto表1select*from表2;2)如果表1中有数据,并且和表2中的数据完全关联的上的话:update表1set表1.sj=(select表2.sjfrom表2where表2.字段X=表1.字段Xand....);3)如果表1中有数据,但是表2中只有一部分能够关联上,目的是关联上的更新,关联不上的插入表1的话:先:update表1set表1.sj=(select表2.sjfrom表2where表2.字段X=表1.字段Xand....);后:insert表1select*from表2where表2.关联字段Xnotin(select表1.关联字段Xfrom表1)and表2.关联字段Ynotin(select表1.关联字段Yfrom表1)....---以上,希望对你有所帮助。
在PL/SQL中,在表上可以有多个LOE列对吗?
1.1使用标量变量接受数据 v_ename emp.ename%type; v_sal emp.sal%type; select ename,sal into v_ename,v_sal from emp where empno=&no; 1.2使用记录变量接受数据 type emp_record_type is record( ename emp.ename%type,sal emp.sal%type); emp_record emp_record_type; select ename,sal into emp_record from emp where empno=&no; 1.3嵌入SELECT语句注意事项: 使用SELECT INTO语句时,必须要返回一条数据,并且只能返回一条数据 no_date_found: select into没有返回数据 too_many_rows: select into返回多条数据
怎样在sql中使用自定义函数返回的Record
函数一般应该是标量单值函数。比如 f_getdata(x int) 返回字符那么就可以在sql语句中直接调用:1select a.*,f_getdata(a.type) from tablename a
pl/sql存储过程返回record类型的结果,java里如何调用呢?
cst.registerOutParameter(2, Types.DOUBLE);
mysql 存储过程 传多个参数无法识别
存储过程里的递归调用传的是一个参数,这肯定不对 while(done = 0) do call iterateCategory(b); fetch c into b; end while;
SQL 查询语句 咨询
select *from 表where recorddeal=recordtype
android sqlite 已经插入到数据库的数据查不到
在使用PDA的过程中,发现数据库有数据,但是程序里面却看不到数据,程序没有问题,刚开始一直怀疑是程序的问题,但是其他的pda采用这套程序,使用过程中都没有出现这个问题 往上找了很多资料,和调试bug,问题一直没有解决. 经过多次寻找,产生的此问题的可能原因如下: 1.pda当前的年月日和数据库的对应表的时间对不上, 如pda没有同步时间的时,默认的时间是1970.1.1,如果只改了月和日,忽略了改年.结果导致数据库找不到对应的表,所以导致问题产生 2.在程序没有退出的过程中,即刻导入有数据的数据库,,程序一直在查询老表没有数据的数据库的过程中,会把新导入的数据库给删除掉,导致,重新登陆这个程序后,依然没有发现数据. 解决办法:先程序退出,然后把没有数据的数据库删除掉,重新导入有数据的数据库,打开软件, 禁止时间同步,即可!
mssql 中 varchar 和 nvarchar 有什么区别?
varchar(n)长度为 n 个字节的可变长度且非 Unicode 的字符数据。n 必须是一个介于 1 和 8,000 之间的数值。存储大小为输入数据的字节的实际长度,而不是 n 个字节。nvarchar(n)包含 n 个字符的可变长度 Unicode 字符数据。n 的值必须介于 1 与 4,000 之间。字节的存储大小是所输入字符个数的两倍。
这是什么意思“in omnibus requiem quaesivi, et nusquam inveni nisi in angulo cum libro.”
在综合安魂曲quaesivi ,等nusquam inveni暂准在安古洛暨图书在网上看到的!不知道对不?
在一台机器上,怎么安装多个mysql数据库,怎样开启多个mysql服务,。在线等,
不需要这么麻烦。留下蔻蔻吧
SQL Server Agent 安装及配置使用
你的什么版本? 只有standard版本以上才有
SQL SERVER登录模式的账号在哪里设??(2008)
如果我没记错。那个账号好像是在安装的时候创建的。你试着看看是不是。
SQL数据库:按成绩【90,100】评‘A’;【80,89】评‘B’ 【70,79】评‘C’ 【0,69】评‘D’
select c.cname as 课成名, s.sname as 姓名,max(case when grade >=90 and grade <=100 then "A" when grade >=80 and grade <=89 then "B" when grade>=70 and grade<=79 then "C" else "D" end) as 成绩 from s,sc,c where s.s#=sc.s# and c.c#=sc.c# group by c.cname,s.sname,
安装sql server 2008 时服务器配置中服务账户怎么选择
这个是说,运行这些服务时用什么样的帐户。都选择Local Service帐户就可以了。最后一个,当别人在网络上浏览的时候,要不要显示你的机器,可以禁用。
SQL优化之show profiles
首先查看是否支持该功能。 默认是关闭的,开启该功能。 查看开启状态。15表示历史缓存sql的个数。 接下来随便运行几条sql,并使用 show profiles 命令,将展示刚才运行的SQL语句。参数很好理解,不做解释了。 下面分析指定的SQL语句,使用如下命令(4是上面查出来的Query_ID,cpu和block io代表cpu的处理时间和io的时间): 如果cpu时间慢,表示cpu的占用率比较高,io慢的话,表示内存占用率比较高。 其中cpu和block io两个参数比较重要,还有其他参数,如下: 在show profile 的时候有一个字段叫status,几个重要的参数如下: 除了上述几个字段,如果Status出现了如下几个字段,说明SQL性能问题很严重。
跪求鼠来宝2:明星俱乐部AlvinandtheChipmunks:TheSqueakquel(2009)由贝蒂·托马斯导演的百度云资源
《鼠来宝2:明星俱乐部》百度网盘高清资源免费在线观看链接:https://pan.baidu.com/s/1srWiOgXf3-tYLBg_utZjlg 提取码:r7uq导演: 贝蒂·托马斯编剧: 约翰·维蒂 / 乔纳森·阿贝尔 / 格伦·伯杰 / 罗斯·巴格达萨里安主演: 扎克瑞·莱维 / 大卫·克罗斯 / 杰森·李 / 贾斯汀·朗 / 马修·格雷·古柏勒 / 杰西·麦卡尼 / 艾米·波勒 / 安娜·法瑞丝 / 克里斯蒂娜·艾伯盖特 / 温蒂·马力克 / 安赫拉·约翰逊 / 凯瑟琳·茱斯顿 / 凯文·G·施密特 / 克里斯·沃伦 / 布丽奇·门德勒 / 艾米·卡里诺 / 亚历山德拉·希普 / 格雷格·宾克利 / 夏芮丝 / 伯纳德·怀特 / 乔伊·奥斯曼斯基 / 兰尼·琼 / 布兰登·伊顿 / 艾瑞克·鲍扎 / 西恩·奥斯汀 / 马蒂·朱 / 贾内尔·吉恩斯特拉 / 瑞秋·布鲁克·史密斯 / 瑞安·康菲多 / 小西北斗 / 吉·亚历山大 / 马克·阿尔科弗 / 小罗斯·巴达塞里安 / 亚历克斯·贝内特 / 米兰达·克里斯汀 / 杰瑞·福图纳 / 珍妮丝·卡门 / 卡尔·席尔瓦 / 杰拉·阿斯基 / 卡斯珀·斯玛特 / 安德鲁·汤普森类型: 喜剧 / 动画 / 音乐 / 家庭 / 奇幻制片国家/地区: 美国语言: 英语 / 法语上映日期: 2010-02-08(中国大陆) / 2009-12-23(美国)片长: 88分钟又名: 鼠来宝2 / 艾尔文与花栗鼠2 / 花鼠明星俱乐部2 / Alvin and the Chipmunks 2上一集的相会,无意改变了作曲家戴夫·塞维利亚(杰森·李 Jason Lee 饰)与三只可爱的花栗鼠艾尔文(贾斯汀·朗 Justin Long 配音)、西蒙(马修·格雷·库伯勒 Matthew Gray Gubler配音)与西奥多(杰西·麦卡尼 Jesse McCartney 配音),他们结伴出游,享受音乐的乐趣,当然也闹出不少的乱子和笑话。意外受伤的戴夫将三只小家伙托付给杰姬阿姨,还为他们办了入学手续。但杰姬阿姨也出了事故,艾尔文他们只能和戴夫不着调的侄子托比(扎克瑞·莱维 Zachary Levi 饰)混在一起,开始了校园生活,还结识了另外三只美丽可爱的小花栗鼠布列塔妮(克里斯蒂娜·艾伯盖特 Christina Applegate 配音)、埃莉诺(艾米·波勒 Amy Poehler 配音)与珍妮特(安娜·法瑞丝 Anna Faris 饰)。有趣、浪漫且韵律十足的校园故事轻松上演。
SQL 网络接口, error: 26 - 定位指定的服务器/实例时出错
是不是用默认实例的问题 没用过2005 你看看安装的时候是默认的实例 现在你把实例名改下 改成主机名 应该就可以了 试试吧 不行的话 我明天上班做下实验
jsp读SQL数据库信息并逐条向上滚动公告显示
<tablewidth="250"id="mytalbe"style="background:url("images/b.gif")"><%WebApplicationContextwac=WebApplicationContextUtils.getWebApplicationContext(this.getServletContext());INoticeboardService<Noticeboard>noticeboardSer=(INoticeboardService)wac.getBean("noticeboardService");List<Noticeboard>noticeboradList=noticeboardSer.list("FromNoticeboardasnorderbyiddesc");//此处你取出的是第1条数据所以只显示一条,显示多条应该将此注释//Noticeboardnb=noticeboradList.get(0);%><tr><td><marqueedirection="up"height="300"onmouseout="this.start()"onMouseOver="this.stop()"scrollamount="2"><%//循环将消息显示for(inti=0;i<noticeboradList.size();i++){Noticeboardnb=noticeboradList.get(i);%><%=nb.getContent()%><br/><%}%></marquee></td></tr></table>
sqlserver里出现好多的Audit Logout请问高手如何解决啊??
因为ado ole db 提供程序,不允许多个结果等待一个连接,所以它会创建第二个连接执行命令,就会登入和登出,这多发生在执行聚合函数时,如果你恰好使用了聚合函数,那么本解决方案可能对你有用,就是用子查询的方式实现聚合函数的功能。
mssql中Audit Logout运行很长时间
oracle10g的DBMS_XPLAN包中display_cursor函数不同于display函数,display_cursor用于显示SQL语句的真实的执行计划,在大多数情况下,显示真实的执行计划有助于更好的分析SQL语句的全过程,尤其是运行此SQL语句实时的I/O开销。通过对比预估的I/O与真实的I/O开销来判断SQL语句所存在问题,如缺少统计信息,SQL语句执行的次数,根据实际中间结果集的大小来选择合适的连接方式等。本文仅仅讲述display_cursor函数的使用。一、display_cursor函数用法1、display_cursor函数语法DBMS_XPLAN.DISPLAY_CURSOR(sql_idINVARCHAR2DEFAULTNULL,cursor_child_noINNUMBERDEFAULTNULL,formatINVARCHAR2DEFAULT"TYPICAL");2、display_cursor函数参数描述sql_id指定位于库缓存执行计划中SQL语句的父游标。默认值为null。当使用默认值时当前会话的最后一条SQL语句的执行计划将被返回可以通过查询V$SQL或V$SQLAREA的SQL_ID列来获得SQL语句的SQL_ID。cursor_child_no指定父游标下子游标的序号。即指定被返回执行计划的SQL语句的子游标。默认值为0。如果为null,则sql_id所指父游标下所有子游标的执行计划都将被返回。format控制SQL语句执行计划的输出部分,即哪些可以显示哪些不显示。使用与display函数的format参数与修饰符在这里同样适用。除此之外当在开启statistics_level=all时或使用gather_plan_statistics提示可以获得执行计划中实时的统计信息有关详细的format格式描述请参考:dbms_xplan之display函数的使用中format参数的描述下面给出启用统计信息时format新增的修饰符iostats控制I/O统计的显示last默认,显示所有执行计算过的统计。如果指定该值,则只显示最后一次执行的统计信息memstats控制pga相关统计的显示allstats此为iostatsmemstats的快捷方式,即allstats包含了iostats和memstatsrun_stats_last等同于iostatslast。只能用于oracle10gR1run_stats_tot等同于iostats。只能用于oracle10gR1抓一个最近一小时最消耗IO的SQL:SELECTsql_id,COUNT(*)FROMgv$active_session_historyash,gv$event_nameevtWHEREash.sample_time>SYSDATE-1/24ANDash.session_state="WAITING"ANDash.event_id=evt.event_idANDevt.wait_class="UserI/O"GROUPBYsql_idORDERBYCOUNT(*)DESC;执行上面的SQL:SQL>SELECTsql_id,COUNT(*)FROMgv$active_session_historyash,gv$event_nameevt23WHEREash.sample_time>SYSDATE-1/244ANDash.session_state="WAITING"5ANDash.event_id=evt.event_id6ANDevt.wait_class="UserI/O"7GROUPBYsql_id8ORDERBYCOUNT(*)DESC;SQL_IDCOUNT(*)-----------------------g7fu6qba82m6b66863r47zyphdk065269f5m4wd88nc1h514593p47drw5fhk232br91w16jzy4fu1204fvwyjpnh6tp778gm0nrbfuj8kzr702184k363hw4xd68gc4dajs7g5myy468vrk9sfuwfdgq42ccpnb4dwdmq2140查看SQL的执行计划:SELECT*FROMTABLE(dbms_xplan.display_cursor("g7fu6qba82m6b"));在SQLPLUS中执行:SQL>setpagesize2000SQL>SELECT*FROMTABLE(dbms_xplan.display_cursor("g7fu6qba82m6b"));PLAN_TABLE_OUTPUT------------------------------------------------------------------------------------------------------------------------SQL_IDg7fu6qba82m6b,childnumber0-------------------------------------UPDATE"CPDDS_PDATA"."CDM_LEDGER"SET"CSTM_NAME"=:a1,"CSTM_NO"=:a2,"PAPER_TYPE"=:a3,"PAPER_NO"=:a4,"CURR_TYPE"=:a5,"SVT_NO"=:a6,"BAL_DIR"=:a7,"BAL"=:a8,"AVAL_BAL"=:a9,"NORM_FRATIO"=:a10,"PK_BAL"=:a11,"DR_ACCU"=:a12,"CR_ACCU"=:a13,"LAST_TRAN_DATE"=:a14,"LAST_TRAN_TIME"=:a15,"PRT_LINE_NUM"=:a16,"NOREG_PK_REC_NUM"=:a17,"PK_NO"=:a18,"PWD"=:a19,"FLAG"=:a20,"FRZ_FLAG"=:a21,"CARD_HOLD_FLAG"=:a22,"PK_HOLD_FLAG"=:a23,"BGN_INT_DATE"=:a24,"OPEN_DATE"=:a25,"ACC_HOLD_FLAG"=:a26,"CLS_DATE"=:a27,"OPEN_TLR"=:a28,"CLS_TLR"=:a29,"CLS_INT"=:a30,"OPEN_INST"=:a31,"ADD_NUM"=:a32,"DAC"=:a33,"FRZ_TIMES1"=:a34,"FRZ_TIMES2"=:a35,"HOST_SEQNO"=:a36,"D_UPDATE_DATE"=:a37WHERE"ACC"=:b0Planhashvalue:319441092-----------------------------------------------------------------------------------|Id|Operation|Name|Rows|Bytes|Cost(%CPU)|Time|-----------------------------------------------------------------------------------|0|UPDATESTATEMENT||||3(100)|||1|UPDATE|CDM_LEDGER||||||*2|INDEXUNIQUESCAN|I_CDM_LEDGER|1|269|2(0)|00:00:01|-----------------------------------------------------------------------------------PredicateInformation(identifiedbyoperationid):---------------------------------------------------2-access("ACC"=:B0)29rowsselected.总结1、与display函数不同,display_cursor显示的为真实的执行计划2、对于format参数,使用与display函数的各个值,同样适用于display_cursor函数3、当statistics_level为all或使用gather_plan_statistics提示可以获得执行时的统计信息4、根据真实与预估的统计信息可以初步判断SQL效率低下的原因,如统计信息的准确性、主要的开销位于那些步骤等
sqlserver里出现好多的Audit Logout请问高手如何解决
检查程序的连接字符串,设定最大连接池并发数量,这个十之八九是程序的问题 另外服务器是否开启了审计功能,关闭试试.
怎么用sql语言,查询信息系统成绩高于刘晨的学生姓名
select sname from student where sno = (select sno from sc where grade > (select grade from student, sc where sname = "刘晨" and Student.sno =sc.sno))
关于SQL数据查询语句
哪个不会说哪个吧。前面的应该都不难的
求助三个个SQL查询结果相减 或者是说三个结果比较列出不同的结果怎么写 ?用not in 出错
select a.ct-b.ct-c.ct from(select count(partyid) as ct from sc_student_info a,sc_mapip_floor b where a.building=b.building and a.floor=b.floor and b.ip="192.168.4.90") a,(select count(partyid) as ct from sc_login_trace where ip="192.168.4.90" and logindate="now") b,(SELECT count(a.studentid) as ct from sc_absent a,sc_student_info b,sc_mapip_floor c WHERE a.studentid=b.partyid AND b.building=c.building AND b.floor=c.floor and c.IP="192.168.4.90") c
用SQL创建存储过程的题目(SQL SERVER2000下)
SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGOCREATE PROCEDURE sp_Getinfo @ag_sname nchar(10) --传递的参数ASBEGIN select 你想要的字段 from student a, course b, sc C where a.sno = c.sno and b.cno = c.cno and trim(a.sname) = @ag_sname --简单的链接,把参数写到语句里ENDGO--执行语句 EXEC sp_Getinfo "名字"
property在SQL里面代表什么意思
属性的意思呀
magnitude-squared意思
好难的单词square 四边形squared 平方的
关于plsql连接oracle,防火墙端口限制的问题
数据库监听在1521端口,防火墙禁用这个端口后,监听就会报错没法工作,当然也就无法远程连接了。不知道想实现什么样的效果
mysql 两张表 city表和province表。分别为城市与省份的关系表。
select c1.provinceid,p1.province,count(1) pronums from city c1 inner join province p1 on c1.provinceid=p1.idgroup by c1.provinceid,p1.province
delphi能否实现用sql语句从sql的表中提取数据并进行运算
与DELPHI无关。数据库的表设计有一条重要规则,凡是可以通过表中数据运算可以得出的结果,都不要在表中另设字段。比如单价乘以数量等于金额,那么,金额这个字段就不就该在表中出现。由此可知,在SQL语句中,是可以进行数据运算的;比如表中如果已经有了出生日期这个字段,我们就不在需要年龄这段字段,但是用户在浏览查询的数据的时候,又需要看到年龄,因为谁也不愿意去根据出生年月来搬手指计算年龄。因此我们必须在显示数据的栅格表中添加一列,显示年龄,这个年龄就要在SQL语句中计算了。先在本代码段的BEGIN前面定义一个变量DQRQ:string;然后再代码段中给它赋值:dqrq:=dateTostr(date);这样我们就可以写如下SQL语句:"selectzyidas住院号,xmas姓名,ryrqas入院日期,(#"+dqrq+"#-csny)/365as年龄,"+"jgysas经管医生,cyrqas出院日期,zyfyas住院费用,"+"fycdzas费用承担者,jcrqas交出日期,scras收取人,"+"gdrqas归档日期,gdras归档人frombagdb"+"wherejcrqisnullandscrisnullandcyrqisnotnullandryhsisnotnull"+"ORDERBYcyrqasc";请注意“(#"+dqrq+"#-csny)/365as年龄”的写法。这是ACCESS的写法,SQLserver2000的写法有些不同。SQLserver2000的日期值是不需要#的,它的写法如:TB_BR_JB.RYRQBETWEEN"""+edit15.Text+"""AND"""+edit16.Text+"""";RYRQ(入院日期)在表中是日期型字段。
Square dancing is becoming very popular 主谓宾状语,是什么
Squaredancing(主语)isbecoming(系动词)verypopular(表语).句子成分分析:主语:Squaredancing谓语(系动词与表语构成):isbecomingpopular状语:very分析:1、这是一个主系表结构的简单句。2、简单句的基本类型:1)、主语+系动词+……。如:Heisastudent.他是一个学生。2)、主语+谓语(不及物动词)+……。如:Sheisstandingoverthere.她正站在那边。3)、主语+谓语(及物动词)+宾语+……。如:Heoftendoeshishomeworkafterschool.他经常在放学后做作业。4)、主语+谓语(及物动词)+间接宾语+直接宾语+……。如:Hegavemeapenyesterday.他昨天给了我一支钢笔。5)、主语+谓语(及物动词)+宾语+宾语补足语+……。如:Ourteacheroftenasksustocometoschoolontime.我们老师经常叫我们按时到校。
在SQL数据库中public是什么意思
SQL数据库中的public是一个默认的用户角色。为便于管理数据库中的权限,SQL提供了若干“角色”,这些角色是用于对其他主体进行分组的安全主体。它们类似于MicrosoftWindows操作系统中的组。数据库级角色的权限作用域为数据库范围。每个SQLServer登录名均属于public服务器角色。如果未向某个服务器主体授予或拒绝对某个安全对象的特定权限,该用户将继承授予该对象的public角色的权限。当希望该对象对所有用户可用时,只需对任何对象分配public权限即可。但是,无法更改public中的成员关系。默认情况下,所有的数据库用户都属于public角色,因此赋予public角色的权限,所有的用户都会具备。
QA是什么职位, QC和SQE有什么区别。
QA/QE/QC/SQE的区别如下:1、含义不同QA即quality assurance:质量保证工程师,主要工作是质量评审和产品评审。QE即quality engineer :质量工程师,主要负责建立、分析、完善品质控制程序。SQE即Supplier quality engineering:供应商质量管理员,负责供应商管控。QC即quality control :质检员,主要按照QE指定的品质文件进行品质控制。2、工作内容不同质量保证QA侧重流程系统管理,主要是事后的质量检验类活动为主;QE侧重生产过程质量工程管理;SQE侧重供应商质量管理;QC侧重产品事先的质量保证类活动,以预防为主。3、级别不同:QE和SQE级别高于QA和QC。扩展资料QA的主要职责就是质量保证工作。在设置这类人员时,最重要的是考虑他的知识、技能和素质是否符合组织和岗位的规定和要求。这些要求是依据企业文化和成熟度的不同而有所侧重。比如说,对于一个协作意识较弱、官僚主义较浓的企业,沟通对QA来说可能是一个重要的素质要求;对于成熟度较低,还没有制度化标准过程的企业,对业务的了解和QA专业知识的精通可能是选择QA最重要的标准。QE,全称Quality Engineer,中文名:质量工程师。负责从样品到量产整个生产过程的产品质量控制,寻求通过测试、控制及改进流程以提升产品质量,解决产品生产过程中所出现的质量问题,处理品质异常及品质改善。QC是英文QUALITY CONTROL的缩写,中文“质量控制”。组织为满足质量要求会设置质量管理及质量控制的部门(Quality Control Department),安排从事质量控制职能的质量控制人员(Quality Control Personnel)、通常质量控制职能由质量检验员(Quality Checker简称QC)和质量工程师(Quality Engineer简称QE)分担。SQE 即供应商质量工程师(Supplier Quality Engineer)。职责:1、负责保障供应商所供原材料的质量,由于供应商供货物料质量缺陷引发的问题要及时反馈供应商要求其改善;2、负责追踪确认供应商的改善报告及实施效果,必要时可进行现场审核检查以及辅导;3、负责制定进货检验部门的检验规范及检验计划,并适时对检验员进行培训指导。参考资料来源:百度百科:QA参考资料来源:百度百科:qe(品质工程师)参考资料来源:百度百科:QC参考资料来源:百度百科:SQE
QF、SQ分别代表什么电器元件的文字符号
SQ-行程开关QF:断路器 FR:热继电器KT:时间继电器KV:电压继电器SB:按钮
You can make it up by giving yourself an extra square the next day.这句话是什么意思?
你第二条可以通过给自己一个额外的空间来完成它
sqq 什么意思
这是出现在什么语境的,不同语境意思不一样
舞步中的SSQQ和SQQS什么意思
舞步中的SSQQ和SQQS意思是**慢快快慢**和**慢快快**。SSQQ表示慢快快慢,而SQQS表示慢快快。这两种舞步通常用于打节奏,其中S表示慢,Q表示快。一个S的时间值为两拍,而一个Q的时间值为一拍。
急!急!sql语句中 HAVING(((a表.字段) Between Date()And Date()-1)) 是什么意思?
查找间于Date() 和 Date()-1的“信息”(你没列出)用a表.字段来排序。你可以用where data = ""来查询吗?不能的话就算了。
SQL server2005怎么使用控制台创建索引
CREATE [UNIQUE] [CLUSTERED|NONCLUSTERED] INDEX index_name ON table_name (column_name…) [WITH FILLFACTOR=x]q UNIQUE表示唯一索引,可选q CLUSTERED、NONCLUSTERED表示聚集索引还是非聚集索引,可选q FILLFACTOR表示填充因子,指定一个0到100之间的值,该值指示索引页填满的空间所占的百分比
sql怎么建立索引?
什么是索引拿汉语字典的目录页(索引)打比方:正如汉语字典中的汉字按页存放一样,SQL Server中的数据记录也是按页存放的,每页容量一般为4K 。为了加快查找的速度,汉语字(词)典一般都有按拼音、笔画、偏旁部首等排序的目录(索引),我们可以选择按拼音或笔画查找方式,快速查找到需要的字(词)。同理,SQL Server允许用户在表中创建索引,指定按某列预先排序,从而大大提高查询速度。• SQL Server中的数据也是按页( 4KB )存放• 索引:是SQL Server编排数据的内部方法。它为SQL Server提供一种方法来编排查询数据。• 索引页:数据库中存储索引的数据页;索引页类似于汉语字(词)典中按拼音或笔画排序的目录页。• 索引的作用:通过使用索引,可以大大提高数据库的检索速度,改善数据库性能。索引类型• 唯一索引:唯一索引不允许两行具有相同的索引值• 主键索引:为表定义一个主键将自动创建主键索引,主键索引是唯一索引的特殊类型。主键索引要求主键中的每个值是唯一的,并且不能为空• 聚集索引(Clustered):表中各行的物理顺序与键值的逻辑(索引)顺序相同,每个表只能有一个• 非聚集索引(Non-clustered):非聚集索引指定表的逻辑顺序。数据存储在一个位置,索引存储在另一个位置,索引中包含指向数据存储位置的指针。可以有多个,小于249个索引类型:再次用汉语字典打比方,希望大家能够明白聚集索引和非聚集索引这两个概念。唯一索引:唯一索引不允许两行具有相同的索引值。如果现有数据中存在重复的键值,则大多数数据库都不允许将新创建的唯一索引与表一起保存。当新数据将使表中的键值重复时,数据库也拒绝接受此数据。例如,如果在stuInfo表中的学员员身份证号(stuID) 列上创建了唯一索引,则所有学员的身份证号不能重复。提示:创建了唯一约束,将自动创建唯一索引。尽管唯一索引有助于找到信息,但为了获得最佳性能,建议使用主键约束或唯一约束。主键索引:在数据库关系图中为表定义一个主键将自动创建主键索引,主键索引是唯一索引的特殊类型。主键索引要求主键中的每个值是唯一的。当在查询中使用主键索引时,它还允许快速访问数据。聚集索引(clustered index)在聚集索引中,表中各行的物理顺序与键值的逻辑(索引)顺序相同。表只能包含一个聚集索引。例如:汉语字(词)典默认按拼音排序编排字典中的每页页码。拼音字母a,b,c,d……x,y,z就是索引的逻辑顺序,而页码1,2,3……就是物理顺序。默认按拼音排序的字典,其索引顺序和逻辑顺序是一致的。即拼音顺序较后的字(词)对应的页码也较大。如拼音“ha”对应的字(词)页码就比拼音“ba” 对应的字(词)页码靠后。非聚集索引(Non-clustered)如果不是聚集索引,表中各行的物理顺序与键值的逻辑顺序不匹配。聚集索引比非聚集索引(nonclustered index)有更快的数据访问速度。例如,按笔画排序的索引就是非聚集索引,“1”画的字(词)对应的页码可能比“3”画的字(词)对应的页码大(靠后)。提示:SQL Server中,一个表只能创建1个聚集索引,多个非聚集索引。设置某列为主键,该列就默认为聚集索引如何创建索引使用T-SQL语句创建索引的语法:CREATE [UNIQUE] [CLUSTERED|NONCLUSTERED] INDEX index_name ON table_name (column_name…) [WITH FILLFACTOR=x]q UNIQUE表示唯一索引,可选q CLUSTERED、NONCLUSTERED表示聚集索引还是非聚集索引,可选q FILLFACTOR表示填充因子,指定一个0到100之间的值,该值指示索引页填满的空间所占的百分比在stuMarks表的writtenExam列创建索引:USE stuDBGOIF EXISTS (SELECT name FROM sysindexes WHERE name = "IX_writtenExam") DROP INDEX stuMarks.IX_writtenExam /*--笔试列创建非聚集索引:填充因子为30%--*/CREATE NONCLUSTERED INDEX IX_writtenExam ON stuMarks(writtenExam) WITH FILLFACTOR= 30GO/*-----指定按索引 IX_writtenExam 查询----*/SELECT * FROM stuMarks (INDEX=IX_writtenExam) WHERE writtenExam BETWEEN 60 AND 90虽然我们可以指定SQL Server按哪个索引进行数据查询,但一般不需要我们人工指定。SQL Server将会根据我们创建的索引,自动优化查询。索引的优缺点• 优点– 加快访问速度– 加强行的唯一性• 缺点– 带索引的表在数据库中需要更多的存储空间– 操纵数据的命令需要更长的处理时间,因为它们需要对索引进行更新创建索引的指导原则• 请按照下列标准选择建立索引的列。– 该列用于频繁搜索– 该列用于对数据进行排序• 请不要使用下面的列创建索引:– 列中仅包含几个不同的值。– 表中仅包含几行。为小型表创建索引可能不太划算,因为SQL Server在索引中搜索数据所花的时间比在表中逐行搜索所花的时间更长
sql server 2000 新建表的SQL语句
insert into 表名values()
为表添加普通索引的SQL语句是怎样的
create Index index_name on table_name(col1_name,col2_name...);注: 1.index_name :你建立的索引名 2.table_name:你将要加索引的表名 3.col1_name:你要加索引的列名,从col1_name往后的列名都可以为空,如果不为空就变为组合索引。
在sql语句中给表增加候选索引与增加唯一索引分别怎么写?
示例;在表GoodsMade_Labour的SID列上创建唯一索引IX_GoodsMade_Labour,代码如下:create unique index IX_GoodsMade_Labour on GoodsMade_Labour(SID)这样情况下创建的是非聚集索引,它和使用nonclustered关键效果是一样的。create unique nonclustered index IX_GoodsMade_Labour on GoodsMade_Labour(SID)如果要创建聚集索引,可使用关键字clustered,代码如下:create unique clustered index IX_GoodsMade_Labour on GoodsMade_Labour(SID)
sql索引分为几类?
SQL SERVER中索引类型包括的三种类型分别是ufeffufeff唯一索引(UNIQUE),聚集索引(CLUSTERED) ,非聚集索引(NONCLUSTERED)。主键与唯一索引的区别 主键是一种约束,唯一索引是一种索引,两者在本质上是不同的。 主键创建后一定包含一个唯一性索引,唯一性索引并不一定就是主键。 唯一性索引列允许空值,而主键列不允许为空值。 主键列在创建时,已经默认为空值 + 唯一索引了。 主键可以被其他表引用为外键,而唯一索引不能。 一个表最多只能创建一个主键,但可以创建多个唯一索引。 主键更适合那些不容易更改的唯一标识,如自动递增列、身份证号等。 在 RBO 模式下,主键的执行计划优先级要高于唯一索引。 两者可以提高查询的速度。
SQL Server 报错 高分~!!
学习了~~
如何处理SQL Server死锁问题
死锁,简而言之,两个或者多个trans,同时请求对方正在请求的某个对象,导致双方互相等待。简单的例子如下:trans1 trans2------------------------------------------------------------------------1.IDBConnection.BeginTransaction 1.IDBConnection.BeginTransaction2.update table A 2.update table B3.update table B 3.update table A4.IDBConnection.Commit 4.IDBConnection.Commit 那么,很容易看到,如果trans1和trans2,分别到达了step3,那么trans1会请求对于B的X锁,trans2会请求对于A的X锁,而二者的锁在step2上已经被对方分别持有了。由于得不到锁,后面的Commit无法执行,这样双方开始死锁。好,我们看一个简单的例子,来解释一下,应该如何解决死锁问题。-- Batch #1CREATE DATABASE deadlocktestGOUSE deadlocktestSET NOCOUNT ONDBCC TRACEON (1222, -1)-- 在SQL2005中,增加了一个新的dbcc参数,就是1222,原来在2000下,我们知道,可以执行dbcc --traceon(1204,3605,-1)看到所有的死锁信息。SqlServer 2005中,对于1204进行了增强,这就是1222。GO IF OBJECT_ID ("t1") IS NOT NULL DROP TABLE t1IF OBJECT_ID ("p1") IS NOT NULL DROP PROC p1IF OBJECT_ID ("p2") IS NOT NULL DROP PROC p2GOCREATE TABLE t1 (c1 int, c2 int, c3 int, c4 char(5000)) GODECLARE @x intSET @x = 1WHILE (@x <= 1000) BEGININSERT INTO t1 VALUES (@x*2, @x*2, @x*2, @x*2)SET @x = @x + 1ENDGOCREATE CLUSTERED INDEX cidx ON t1 (c1)CREATE NONCLUSTERED INDEX idx1 ON t1 (c2)GOCREATE PROC p1 @p1 int AS SELECT c2, c3 FROM t1 WHERE c2 BETWEEN @p1 AND @p1+1GOCREATE PROC p2 @p1 int ASUPDATE t1 SET c2 = c2+1 WHERE c1 = @p1UPDATE t1 SET c2 = c2-1 WHERE c1 = @p1GO上述sql创建一个deadlock的示范数据库,插入了1000条数据,并在表t1上建立了c1列的聚集索引,和c2列的非聚集索引。另外创建了两个sp,分别是从t1中select数据和update数据。 好,打开一个新的查询窗口,我们开始执行下面的query:-- Batch #2USE deadlocktestSET NOCOUNT ONWHILE (1=1) EXEC p2 4GO开始执行后,然后我们打开第三个查询窗口,执行下面的query:-- Batch #3USE deadlocktestSET NOCOUNT ONCREATE TABLE #t1 (c2 int, c3 int)GOWHILE (1=1) BEGININSERT INTO #t1 EXEC p1 4TRUNCATE TABLE #t1ENDGO开始执行,哈哈,很快,我们看到了这样的错误信息:Msg 1205, Level 13, State 51, Procedure p1, Line 4Transaction (Process ID 54) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction.spid54发现了死锁。 那么,我们该如何解决它?在SqlServer 2005中,我们可以这么做:1.在trans3的窗口中,选择EXEC p1 4,然后right click,看到了菜单了吗?选择Analyse Query in Database Engine Tuning Advisor。2.注意右面的窗口中,wordload有三个选择:负载文件、表、查询语句,因为我们选择了查询语句的方式,所以就不需要修改这个radio option了。3.点左上角的Start Analysis按钮4.抽根烟,回来后看结果吧!出现了一个分析结果窗口,其中,在Index Recommendations中,我们发现了一条信息:大意是,在表t1上增加一个非聚集索引索引:t2+t1。5.在当前窗口的上方菜单上,选择Action菜单,选择Apply Recommendations,系统会自动创建这个索引。重新运行batch #3,呵呵,死锁没有了。这种方式,我们可以解决大部分的Sql Server死锁问题。那么,发生这个死锁的根本原因是什么呢?为什么增加一个non clustered index,问题就解决了呢? 这次,我们分析一下,为什么会死锁呢?再回顾一下两个sp的写法:CREATE PROC p1 @p1 int AS SELECT c2, c3 FROM t1 WHERE c2 BETWEEN @p1 AND @p1+1 GOCREATE PROC p2 @p1 int ASUPDATE t1 SET c2 = c2+1 WHERE c1 = @p1UPDATE t1 SET c2 = c2-1 WHERE c1 = @p1GO很奇怪吧!p1没有insert,没有delete,没有update,只是一个select,p2才是update。这个和我们前面说过的,trans1里面updata A,update B;trans2里面upate B,update A,根本不贴边啊!那么,什么导致了死锁?需要从事件日志中,看sql的死锁信息:Spid X is running this query (line 2 of proc [p1], inputbuffer “… EXEC p1 4 …”): SELECT c2, c3 FROM t1 WHERE c2 BETWEEN @p1 AND @p1+1Spid Y is running this query (line 2 of proc [p2], inputbuffer “EXEC p2 4”): UPDATE t1 SET c2 = c2+1 WHERE c1 = @p1The SELECT is waiting for a Shared KEY lock on index t1.cidx. The UPDATE holds a conflicting X lock. The UPDATE is waiting for an eXclusive KEY lock on index t1.idx1. The SELECT holds a conflicting S lock.首先,我们看看p1的执行计划。怎么看呢?可以执行set statistics profile on,这句就可以了。下面是p1的执行计划SELECT c2, c3 FROM t1 WHERE c2 BETWEEN @p1 AND @p1+1|--Nested Loops(Inner Join, OUTER REFERENCES:([Uniq1002], [t1].[c1]))|--Index Seek(OBJECT:([t1].[idx1]), SEEK:([t1].[c2] >= [@p1] AND [t1].[c2] <= [@p1]+(1)) ORDERED FORWARD)|--Clustered Index Seek(OBJECT:([t1].[cidx]), SEEK:([t1].[c1]=[t1].[c1] AND [Uniq1002]=[Uniq1002]) LOOKUP ORDERED FORWARD)我们看到了一个nested loops,第一行,利用索引t1.c2来进行seek,seek出来的那个rowid,在第二行中,用来通过聚集索引来查找整行的数据。这是什么?就是bookmark lookup啊!为什么?因为我们需要的c2、c3不能完全的被索引t1.c1带出来,所以需要书签查找。 好,我们接着看p2的执行计划。UPDATE t1 SET c2 = c2+1 WHERE c1 = @p1|--Clustered Index Update(OBJECT:([t1].[cidx]), OBJECT:([t1].[idx1]), SET:([t1].[c2] = [Expr1004]))|--Compute Scalar(DEFINE:([Expr1013]=[Expr1013]))|--Compute Scalar(DEFINE:([Expr1004]=[t1].[c2]+(1), [Expr1013]=CASE WHEN CASE WHEN ...|--Top(ROWCOUNT est 0)|--Clustered Index Seek(OBJECT:([t1].[cidx]), SEEK:([t1].[c1]=[@p1]) ORDERED FORWARD) 通过聚集索引的seek找到了一行,然后开始更新。这里注意的是,update的时候,它会申请一个针对clustered index的X锁的。实际上到这里,我们就明白了为什么update会对select产生死锁。update的时候,会申请一个针对clustered index的X锁,这样就阻塞住了(注意,不是死锁!)select里面最后的那个clustered index seek。死锁的另一半在哪里呢?注意我们的select语句,c2存在于索引idx1中,c1是一个聚集索引cidx。问题就在这里!我们在p2中更新了c2这个值,所以sqlserver会自动更新包含c2列的非聚集索引:idx1。而idx1在哪里?就在我们刚才的select语句中。而对这个索引列的更改,意味着索引集合的某个行或者某些行,需要重新排列,而重新排列,需要一个X锁。SO………,问题就这样被发现了。总结一下,就是说,某个query使用非聚集索引来select数据,那么它会在非聚集索引上持有一个S锁。当有一些select的列不在该索引上,它需要根据rowid找到对应的聚集索引的那行,然后找到其他数据。而此时,第二个的查询中,update正在聚集索引上忙乎:定位、加锁、修改等。但因为正在修改的某个列,是另外一个非聚集索引的某个列,所以此时,它需要同时更改那个非聚集索引的信息,这就需要在那个非聚集索引上,加第二个X锁。select开始等待update的X锁,update开始等待select的S锁,死锁,就这样发生鸟。 那么,为什么我们增加了一个非聚集索引,死锁就消失鸟?我们看一下,按照上文中自动增加的索引之后的执行计划:SELECT c2, c3 FROM t1 WHERE c2 BETWEEN @p1 AND @p1+1|--Index Seek(OBJECT:([deadlocktest].[dbo].[t1].[_dta_index_t1_7_2073058421__K2_K1_3]), SEEK:([deadlocktest].[dbo].[t1].[c2] >= [@p1] AND [deadlocktest].[dbo].[t1].[c2] <= [@p1]+(1)) ORDERED FORWARD)哦,对于clustered index的需求没有了,因为增加的覆盖索引已经足够把所有的信息都select出来。就这么简单。实际上,在sqlserver 2005中,如果用profiler来抓eventid:1222,那么会出现一个死锁的图,很直观的说。下面的方法,有助于将死锁减至最少(详细情况,请看SQLServer联机帮助,搜索:将死锁减至最少即可。按同一顺序访问对象。 避免事务中的用户交互。 保持事务简短并处于一个批处理中。 使用较低的隔离级别。 使用基于行版本控制的隔离级别。 将 READ_COMMITTED_SNAPSHOT 数据库选项设置为 ON,使得已提交读事务使用行版本控制。使用快照隔离。使用绑定连接。
SQL表字段如何建立索引?难道就是添加SQL查询语句?
兄弟你索引的概念还不清楚吧,再去看看关于索引的内容建立索引的语句最主要的一句create index
sqlserver2005 创建链服务器失败 错误15466
在查询分析器里,选择数据库tempdb运行ALTER SERVICE MASTER KEY FORCE REGENERATE这个语句的功能是重新生成本地服务器的主密钥。打开:SQL Server Management Studio选择 数据库 -- 系统数据库 -- tempdb再点击 左上 菜单栏 “新建查询”在查询窗口中输入:ALTER SERVICE MASTER KEY FORCE REGENERATE点击“执行”OK这个语句的功能是重新生成本地服务器的主密钥重启SQL后 就不再出现这个错误日志了
sql,如何用sql语句对一个已经编辑好的表在设置主码和外码?
create table table_namecolum_name datatype[constraint constraint_name] [not] null primary key |unique
用SQL语句创建表,如何以表的形式显示出来,语句写好了
自己打开企业管理器,随便找个表,导出一个创建表的脚本,就什么都有了。要语法,SQL的联机帮助里就有:CREATETABLE [database_name.[schema_name].|schema_name.]table_name({<column_definition>|<computed_column_definition>}[<table_constraint>][,...n]) [ON{partition_scheme_name(partition_column_name)|filegroup|"default"}] [{TEXTIMAGE_ON{filegroup|"default"}][;]<column_definition>::=column_name<data_type> [COLLATEcollation_name] [NULL|NOTNULL] [[CONSTRAINTconstraint_name]DEFAULTconstant_expression]|[IDENTITY[(seed,increment)][NOTFORREPLICATION] ] [ROWGUIDCOL][<column_constraint>[...n]]<datatype>::=[type_schema_name.]type_name [(precision[,scale]|max|[{CONTENT|DOCUMENT}]xml_schema_collection)]<column_constraint>::=[CONSTRAINTconstraint_name]{{PRIMARYKEY|UNIQUE}[CLUSTERED|NONCLUSTERED][WITHFILLFACTOR=fillfactor|WITH(<index_option>[,...n])][ON{partition_scheme_name(partition_column_name)|filegroup|"default"}] |[FOREIGNKEY]REFERENCES[schema_name.]referenced_table_name[(ref_column)][ONDELETE{NOACTION|CASCADE|SETNULL|SETDEFAULT}][ONUPDATE{NOACTION|CASCADE|SETNULL|SETDEFAULT}][NOTFORREPLICATION] |CHECK[NOTFORREPLICATION](logical_expression)}<computed_column_definition>::=column_nameAScomputed_column_expression[PERSISTED[NOTNULL]][ [CONSTRAINTconstraint_name] {PRIMARYKEY|UNIQUE}[CLUSTERED|NONCLUSTERED][WITHFILLFACTOR=fillfactor|WITH(<index_option>[,...n])] |[FOREIGNKEY]REFERENCESreferenced_table_name[(ref_column)][ONDELETE{NOACTION|CASCADE}][ONUPDATE{NOACTION}][NOTFORREPLICATION] |CHECK[NOTFORREPLICATION](logical_expression) [ON{partition_scheme_name(partition_column_name)|filegroup|"default"}]]<table_constraint>::=[CONSTRAINTconstraint_name]{ {PRIMARYKEY|UNIQUE}[CLUSTERED|NONCLUSTERED](column[ASC|DESC][,...n])[WITHFILLFACTOR=fillfactor|WITH(<index_option>[,...n])][ON{partition_scheme_name(partition_column_name)|filegroup|"default"}] |FOREIGNKEY(column[,...n])REFERENCESreferenced_table_name[(ref_column[,...n])][ONDELETE{NOACTION|CASCADE|SETNULL|SETDEFAULT}][ONUPDATE{NOACTION|CASCADE|SETNULL|SETDEFAULT}][NOTFORREPLICATION] |CHECK[NOTFORREPLICATION](logical_expression)}<index_option>::={ PAD_INDEX={ON|OFF} |FILLFACTOR=fillfactor |IGNORE_DUP_KEY={ON|OFF} |STATISTICS_NORECOMPUTE={ON|OFF} |ALLOW_ROW_LOCKS={ON|OFF} |ALLOW_PAGE_LOCKS={ON|OFF}}
我写的一个SQL语句太长,它要求最大128个字符,怎么解决这个问题
CREATE [UNIQUE|CLUSTERED] INDEX INDEX_NAME ON TABLE_NAME(PROPERTY_NAME) 其中UNIQUE和CLUSTERED为可选项,分别是建立唯一索引和聚簇索引,具体解释为: UNIQUE:表示此索引的每一个索引值只对应唯一的数据。 CLUSTERED:表示要建立的索引时聚簇索引,即索引项的顺序与表中记录的物理顺序一致的索引组织。 希望采纳!
SQL语言中,如何创建索引?想要知道具体实例、、谢谢。
create index indexname on tabname(col1 ,col2 desc,....);
mysql索引使用的是Btree还是B+tree?为什么
第一部分主要从数据结构及算法理论层面讨论MySQL数据库索引的数理基矗 第二部分结合MySQL数据库中MyISAM和InnoDB数据存储引擎中索引的架构实现讨论聚集索引、非聚集索引及覆盖索引等话题。 第三部分根据上面的理论基础,讨论MySQL中高性能使用索...
mysql innodb 索引到底是b+树还是b树?
教科书上的B+Tree是一个简化了的,方便于研究和教学的B+Tree。然而在数据库实现时,为了更好的性能或者降低实现的难度,都会在细节上进行一定的变化。下面以InnoDB为例,来说说这些变化。04 - Sparse Index中的数据指针 在“由浅入深理解InnoDB索引的实现(1)”中提到,Sparse Index中的每个键值都有一个指针指向所在的数据页。这样每个B+Tree都有指针指向数据页。如果数据页进行了拆分或合并操作,那么所有的B+Tree都需要修改相应的页指针。特别是Secondary B+Tree(辅助索引对应的B+Tree), 要对很多个不连续的页进行修改。同时也需要对这些页加锁,这会降低并发性。为了降低难度和增加更新(分裂和合并B+Tree节点)的性能,InnoDB 将 Secondary B+Tree中的指针替换成了主键的键值。这样就去除了Secondary B+Tree对数据页的依赖,而数据就变成了Clustered B+Tree(簇索引对应的B+Tree)独占的了。对数据页的拆分及合并操作,仅影响Clustered B+Tree. 因此InnoDB的数据文件中存储的实际上就是多个孤立B+Tree。 一个有趣的问题: 当用户显式的把主键定义到了二级索引中时,还需要额外的主键来做二级索引的数据吗(即存储2份主键)? 很显然是不需要的。InnoDB在创建二级索引的时候,会判断主键的字段是否已经被包含在了要创建的索引中.接下来看一下数据操作在B+Tree上的基本实现。- 用主键查询 直接在Clustered B+Tree上查询。- 用辅助索引查询A. 在Secondary B+Tree上查询到主键。B. 用主键在Clustered B+Tree上查询到数据。可以看出,在使用主键值替换页指针后,辅助索引的查询效率降低了。A. 如果能用主键查询,尽量使用主键来查询数据。 B. 但是由于Clustered B+Tree包含了完整的数据,遍历的效率比 Secondary B+Tree的效率低。如果遍历操作不涉及到二级索引和主键以外的数据,则尽量使用二级索引进行遍历。- INSERTA. 在Clustered B+Tree上插入一条记录B. 在所有其他Secondary B+Tree上插入一条记录(仅包含索引字段和主键)- DELETEA. 在Clustered B+Tree上删除一条记录。B. 在所有Secondary B+Tree上删除二级索引的记录。- UPDATE 非键列A. 在Clustered B+Tree上更新数据。- UPDATE 主键列A. 在Clustered B+Tree删除原有的记录(只是标记为DELETED,并不真正删除)。B. 在Clustered B+Tree插入一条新的记录。C. 在每一个Secondary B+Tree上删除原有的记录。(有疑问,看下一节。)D. 在每一个Secondary B+Tree上插入一个条新的记录。- UPDATE 辅助索引的键值A. 在Clustered B+Tree上更新数据。B. 在每一个Secondary B+Tree上删除原有的记录。C. 在每一个Secondary B+Tree上插入一条新的记录。更新键列时,需要更新多个页,效率比较低。A. 尽量不用对主键列进行UPDATE操作。B. 更新很多时,尽量少建索引。05 – 非唯一键索引 教科书上的B+Tree操作,通常都假设”键值是唯一的“。但是在实际的应用中Secondary Index是允许键值重复的。在极端的情况下,所有的键值都一样,该如何来处理呢?InnoDB 的 Secondary B+Tree中,主键也是此二级键的一部分。 Secondary Key = 用户定义的KEY + 主键。注意主键不仅做为数据出现在叶子节点,同时也作为键的一部分出现非叶子节点。对于非唯一键来说,因为主键是唯一的,Secondary Key也是唯一的。当然,在插入数据时,还是会根据用户定义的Key,来判断唯一性。按理说,如果辅助索引是唯一的(并且所有字段不能为空),就不需要这样做。可是,InnoDB对所有的Secondary B+Tree都这样创建。还没弄明白有什么特殊的用途?有知道的朋友可以帮忙解答一下。也许是为了降低代码的复杂性,这是我想到的唯一理由。弄清楚了,即便是非空唯一键,在二级索引的B+Tree中也可能重复,因此必须要将主键加入到非叶子节点。06 – <Key, Pointer>对 标准的B+Tree的每个节点有K个键值和K+1个指针,指向K+1个子节点。 而在“由浅入深理解索引的实现(1)”中图. 9的B+Tree上,每个节点有K个键值和K个指针。InnoDB的B+Tree也是如此。这样做的好处在于,键值和指针一一对应。我们可以将一个<Key,Pointer>对看作一条记录。这样就可以用数据块的存储格式来存储索引块。因为不需要为索引块定义单独的存储格式,就降低了实现的难度。- 插入最小值 当考虑在变形后的B+Tree上进行INSERT操作时,发现了一个有趣的问题。如果插入的数据的健值比B+Tree的最小键值小时,就无法定位到一个适当的数据块上去(<Key,Pointer>中的Key代表了子节点上的键值是>=Key的)。例如,在图.5的B+Tree中插入键值为0的数据时,无法定位到任何节点。在标准的B+Tree上,这样的键值会被定位到最左侧的节点上去。这个做法,对于图.5中的B+Tree也是合理的。Innodb的做法是,将每一层(叶子层除外)的最左侧节点的第一条记录标记为最小记录(MIN_REC).在进行定位操作时,任何键值都比标记为MIN_REC的键值大。因此0会被插入到最左侧的记录节点上。07 – 顺序插入数据标准的B-Tree分裂时,将一半的键值和数据移动到新的节点上去。原有节点和新节点都保留一半的空间,用于以后的插入操作。当按照键值的顺序插入数据时,左侧的节点不可能再有新的数据插入。因此,会浪费约一半的存储空间。解决这个问题的基本思路是:分裂顺序插入的B-Tree时,将原有的数据都保留在原有的节点上。创建一个新的节点,用来存储新的数据。顺序插入时的分裂过程.以上是以B-Tree为例,B+Tree的分裂过程类似。InnoDB的实现以这个思路为基础,不过要复杂一些。因为顺序插入是有方向性的,可能是从小到大,也可能是从大到小的插入数据。所以要区分不同的情况。如果要了解细节,可参考以下函数的代码。btr_page_split_and_insert();btr_page_get_split_rec_to_right();btr_page_get_split_rec_to_right();InnoDB的代码太复杂了,有时候也不敢肯定自己的理解是对的。因此写了一个小脚本,来打印InnoDB数据文件中B+Tree。这样可以直观的来观察B+Tree的结构,验证自己的理解是否正确。
如何利用索引提高SQLServer数据处理的效率
在良好的数据库设计基础上,能有效地使用索引是SQL Server取得高性能的基础,SQL Server采用基于代价的优化模型,它对每一个提交的有关表的查询,决定是否使用索引或用哪一个索引。因为查询执行的大部分开销是磁盘I/O,使用索引提高性能的一个主要目标是避免全表扫描,因为全表扫描需要从磁盘上读表的每一个数据页,如果有索引指向数据值,则查询只需读几次磁盘就可以了。 所以如果建立了合理的索引,优化器就能利用索引加速数据的查询过程。但是,索引并不总是提高系统的性能,在增、删、改操作中索引的存在会增加一定的工作量,因此,在适当的地方增加适当的索引并从不合理的地方删除次优的索引,将有助于优化那些性能较差的SQL Server应用。实践表明,合理的索引设计是建立在对各种查询的分析和预测上的,只有正确地使索引与程序结合起来,才能产生最佳的优化方案。本文就SQL Server索引的性能问题进行了一些分析和实践。 一、聚簇索引(clustered indexes)的使用 聚簇索引是一种对磁盘上实际数据重新组织以按指定的一个或多个列的值排序。由于聚簇索引的索引页面指针指向数据页面,所以使用聚簇索引查找数据几乎总是比使用非聚簇索引快。每张表只能建一个聚簇索引,并且建聚簇索引需要至少相当该表120%的附加空间,以存放该表的副本和索引中间页。建立聚簇索引的思想是: 1、大多数表都应该有聚簇索引或使用分区来降低对表尾页的竞争,在一个高事务的环境中,对最后一页的封锁严重影响系统的吞吐量。 2、在聚簇索引下,数据在物理上按顺序排在数据页上,重复值也排在一起,因而在那些包含范围检查(between、<、<=、>、>=)或使用group by或order by的查询时,一旦找到具有范围中第一个键值的行,具有后续索引值的行保证物理上毗连在一起而不必进一步搜索,避免了大范围扫描,可以大大提高查询速度。 3、在一个频繁发生插入操作的表上建立聚簇索引时,不要建在具有单调上升值的列(如IDENTITY)上,否则会经常引起封锁冲突。 4、在聚簇索引中不要包含经常修改的列,因为码值修改后,数据行必须移动到新的位置。 5、选择聚簇索引应基于where子句和连接操作的类型。 聚簇索引的侯选列是: 1、主键列,该列在where子句中使用并且插入是随机的。 2、按范围存取的列,如pri_order > 100 and pri_order < 200。 3、在group by或order by中使用的列。 4、不经常修改的列。 5、在连接操作中使用的列。 二、非聚簇索引(nonclustered indexes)的使用 SQL Server缺省情况下建立的索引是非聚簇索引,由于非聚簇索引不重新组织表中的数据,而是对每一行存储索引列值并用一个指针指向数据所在的页面。换句话说非聚簇索引具有在索引结构和数据本身之间的一个额外级。一个表如果没有聚簇索引时,可有250个非聚簇索引。每个非聚簇索引提供访问数据的不同排序顺序。在建立非聚簇索引时,要权衡索引对查询速度的加快与降低修改速度之间的利弊。另外,还要考虑这些问题: 1、索引需要使用多少空间。 2、合适的列是否稳定。 3、索引键是如何选择的,扫描效果是否更佳。 4、是否有许多重复值。 对更新频繁的表来说,表上的非聚簇索引比聚簇索引和根本没有索引需要更多的额外开销。对移到新页的每一行而言,指向该数据的每个非聚簇索引的页级行也必须更新,有时可能还需要索引页的分理。从一个页面删除数据的进程也会有类似的开销,另外,删除进程还必须把数据移到页面上部,以保证数据的连续性。所以,建立非聚簇索引要非常慎重。非聚簇索引常被用在以下情况: 1、某列常用于集合函数(如Sum,....)。 2、某列常用于join,order by,group by。 3、查寻出的数据不超过表中数据量的20%。 三、覆盖索引(covering indexes)的使用 覆盖索引是指那些索引项中包含查寻所需要的全部信息的非聚簇索引,这种索引之所以比较快也正是因为索引页中包含了查寻所必须的数据,不需去访问数据页。如果非聚簇索引中包含结果数据,那么它的查询速度将快于聚簇索引。 但是由于覆盖索引的索引项比较多,要占用比较大的空间。而且update操作会引起索引值改变。所以如果潜在的覆盖查询并不常用或不太关键,则覆盖索引的增加反而会降低性能。 四、索引的选择技术 p_detail是住房公积金管理系统中记录个人明细的表,有890000行,观察在不同索引下的查询运行效果,测试在C/S环境下进行,客户机是IBM PII350(内存64M),服务器是DEC Alpha1000A(内存128M),数据库为SYBASE11.0.3。 1、 select count(*) from p_detail where op_date>"19990101" and op_date<" 19991231" and pri_surplus1>300 2、 select count(*),sum(pri_surplus1) from p_detail where op_date>"19990101" and pay_month between‘199908" and"199912" 不建任何索引查询1 1分15秒 查询2 1分7秒 在op_date上建非聚簇索引查询1 57秒 查询2 57秒 在op_date上建聚簇索引查询1 <1秒 查询2 52秒 在pay_month、op_date、pri_surplus1上建索引查询1 34秒 查询2 <1秒 在op_date、pay_month、pri_surplus1上建索引查询1 <1秒 查询2 <1秒 从以上查询效果分析,索引的有无,建立方式的不同将会导致不同的查询效果,选择什么样的索引基于用户对数据的查询条件,这些条件体现于where从句和join表达式中。一般来说建立索引的思路是: (1)主键时常作为where子句的条件,应在表的主键列上建立聚簇索引,尤其当经常用它作为连接的时候。 (2)有大量重复值且经常有范围查询和排序、分组发生的列,或者非常频繁地被访问的列,可考虑建立聚簇索引。 (3)经常同时存取多列,且每列都含有重复值可考虑建立复合索引来覆盖一个或一组查询,并把查询引用最频繁的列作为前导列,如果可能尽量使关键查询形成覆盖查询。 (4)如果知道索引键的所有值都是唯一的,那么确保把索引定义成唯一索引。 (5)在一个经常做插入操作的表上建索引时,使用fillfactor(填充因子)来减少页分裂,同时提高并发度降低死锁的发生。如果在只读表上建索引,则可以把fillfactor置为100。 (6)在选择索引键时,设法选择那些采用小数据类型的列作为键以使每个索引页能够容纳尽可能多的索引键和指针,通过这种方式,可使一个查询必须遍历的索引页面降到最小。此外,尽可能地使用整数为键值,因为它能够提供比任何数据类型都快的访问速度。 五、索引的维护 上面讲到,某些不合适的索引影响到SQL Server的性能,随着应用系统的运行,数据不断地发生变化,当数据变化达到某一个程度时将会影响到索引的使用。这时需要用户自己来维护索引。索引的维护包括: 1、重建索引 随着数据行的插入、删除和数据页的分裂,有些索引页可能只包含几页数据,另外应用在执行大块I/O的时候,重建非聚簇索引可以降低分片,维护大块I/O的效率。重建索引实际上是重新组织B-树空间。在下面情况下需要重建索引: (1)数据和使用模式大幅度变化。 (2)排序的顺序发生改变。 (3)要进行大量插入操作或已经完成。 (4)使用大块I/O的查询的磁盘读次数比预料的要多。 (5)由于大量数据修改,使得数据页和索引页没有充分使用而导致空间的使用超出估算。 (6)dbcc检查出索引有问题。 当重建聚簇索引时,这张表的所有非聚簇索引将被重建。 2、索引统计信息的更新 当在一个包含数据的表上创建索引的时候,SQL Server会创建分布数据页来存放有关索引的两种统计信息:分布表和密度表。优化器利用这个页来判断该索引对某个特定查询是否有用。但这个统计信息并不动态地重新计算。这意味着,当表的数据改变之后,统计信息有可能是过时的,从而影响优化器追求最有工作的目标。因此,在下面情况下应该运行update statistics命令: (1)数据行的插入和删除修改了数据的分布。 (2)对用truncate table删除数据的表上增加数据行。 (3)修改索引列的值。 六、结束语 实践表明,不恰当的索引不但于事无补,反而会降低系统的执行性能。因为大量的索引在插入、修改和删除操作时比没有索引花费更多的系统时间。例如下面情况下建立的索引是不恰当的: 1、在查询中很少或从不引用的列不会受益于索引,因为索引很少或从来不必搜索基于这些列的行。 2、只有两个或三个值的列,如男性和女性(是或否),从不会从索引中得到好处。 另外,鉴于索引加快了查询速度,但减慢了数据更新速度的特点。可通过在一个段上建表,而在另一个段上建其非聚簇索引,而这两段分别在单独的物理设备上来改善操作性能。
SQL server2000中,如何把两个以上的列设为主键?
建立表后ALTERTABLE表名ADDCONSTRAINT[键名]PRIMARYKEYCLUSTERED(字段一ASC,字段二ASC)ON[PRIMARY]或者建表时CREATETABLE表名(字段一INTNOTNULL,字段二[VARCHAR](16)NOTNULLCONSTRAINT[键名]PRIMARYKEYCLUSTERED(字段一ASC,字段二ASC)ON[PRIMARY])ON[PRIMARY]
帮我解释下SQL建表命令的意思(翻译,详细点谢谢大哥OR大姐)
联机帮助里有很详细的~~~
sqlserver 2008 怎么建立索引
什么是索引拿汉语字典的目录页(索引)打比方:正如汉语字典中的汉字按页存放一样,SQL Server中的数据记录也是按页存放的,每页容量一般为4K 。为了加快查找的速度,汉语字(词)典一般都有按拼音、笔画、偏旁部首等排序的目录(索引),我们可以选择按拼音或笔画查找方式,快速查找到需要的字(词)。同理,SQL Server允许用户在表中创建索引,指定按某列预先排序,从而大大提高查询速度。u2022 SQL Server中的数据也是按页( 4KB )存放u2022 索引:是SQL Server编排数据的内部方法。它为SQL Server提供一种方法来编排查询数据。u2022 索引页:数据库中存储索引的数据页;索引页类似于汉语字(词)典中按拼音或笔画排序的目录页。u2022 索引的作用:通过使用索引,可以大大提高数据库的检索速度,改善数据库性能。索引类型u2022 唯一索引:唯一索引不允许两行具有相同的索引值u2022 主键索引:为表定义一个主键将自动创建主键索引,主键索引是唯一索引的特殊类型。主键索引要求主键中的每个值是唯一的,并且不能为空u2022 聚集索引(Clustered):表中各行的物理顺序与键值的逻辑(索引)顺序相同,每个表只能有一个u2022 非聚集索引(Non-clustered):非聚集索引指定表的逻辑顺序。数据存储在一个位置,索引存储在另一个位置,索引中包含指向数据存储位置的指针。可以有多个,小于249个索引类型:再次用汉语字典打比方,希望大家能够明白聚集索引和非聚集索引这两个概念。唯一索引:唯一索引不允许两行具有相同的索引值。如果现有数据中存在重复的键值,则大多数数据库都不允许将新创建的唯一索引与表一起保存。当新数据将使表中的键值重复时,数据库也拒绝接受此数据。例如,如果在stuInfo表中的学员员身份证号(stuID) 列上创建了唯一索引,则所有学员的身份证号不能重复。提示:创建了唯一约束,将自动创建唯一索引。尽管唯一索引有助于找到信息,但为了获得最佳性能,建议使用主键约束或唯一约束。主键索引:在数据库关系图中为表定义一个主键将自动创建主键索引,主键索引是唯一索引的特殊类型。主键索引要求主键中的每个值是唯一的。当在查询中使用主键索引时,它还允许快速访问数据。聚集索引(clustered index)在聚集索引中,表中各行的物理顺序与键值的逻辑(索引)顺序相同。表只能包含一个聚集索引。例如:汉语字(词)典默认按拼音排序编排字典中的每页页码。拼音字母a,b,c,d……x,y,z就是索引的逻辑顺序,而页码1,2,3……就是物理顺序。默认按拼音排序的字典,其索引顺序和逻辑顺序是一致的。即拼音顺序较后的字(词)对应的页码也较大。如拼音“ha”对应的字(词)页码就比拼音“ba” 对应的字(词)页码靠后。非聚集索引(Non-clustered)如果不是聚集索引,表中各行的物理顺序与键值的逻辑顺序不匹配。聚集索引比非聚集索引(nonclustered index)有更快的数据访问速度。例如,按笔画排序的索引就是非聚集索引,“1”画的字(词)对应的页码可能比“3”画的字(词)对应的页码大(靠后)。提示:SQL Server中,一个表只能创建1个聚集索引,多个非聚集索引。设置某列为主键,该列就默认为聚集索引如何创建索引使用T-SQL语句创建索引的语法:CREATE [UNIQUE] [CLUSTERED|NONCLUSTERED] INDEX index_name ON table_name (column_name…) [WITH FILLFACTOR=x]q UNIQUE表示唯一索引,可选q CLUSTERED、NONCLUSTERED表示聚集索引还是非聚集索引,可选q FILLFACTOR表示填充因子,指定一个0到100之间的值,该值指示索引页填满的空间所占的百分比在stuMarks表的writtenExam列创建索引:USE stuDBGOIF EXISTS (SELECT name FROM sysindexes WHERE name = "IX_writtenExam") DROP INDEX stuMarks.IX_writtenExam /*--笔试列创建非聚集索引:填充因子为30%--*/CREATE NONCLUSTERED INDEX IX_writtenExam ON stuMarks(writtenExam) WITH FILLFACTOR= 30GO/*-----指定按索引 IX_writtenExam 查询----*/SELECT * FROM stuMarks (INDEX=IX_writtenExam) WHERE writtenExam BETWEEN 60 AND 90虽然我们可以指定SQL Server按哪个索引进行数据查询,但一般不需要我们人工指定。SQL Server将会根据我们创建的索引,自动优化查询。索引的优缺点u2022 优点– 加快访问速度– 加强行的唯一性u2022 缺点– 带索引的表在数据库中需要更多的存储空间– 操纵数据的命令需要更长的处理时间,因为它们需要对索引进行更新创建索引的指导原则u2022 请按照下列标准选择建立索引的列。– 该列用于频繁搜索– 该列用于对数据进行排序u2022 请不要使用下面的列创建索引:– 列中仅包含几个不同的值。– 表中仅包含几行。为小型表创建索引可能不太划算,因为SQL Server在索引中搜索数据所花的时间比在表中逐行搜索所花的时间更长
创建索引的sql语句怎么写
CREATE [UNIQUE|CLUSTERED] INDEX INDEX_NAME ON TABLE_NAME(PROPERTY_NAME)其中UNIQUE和CLUSTERED为可选项,分别是建立唯一索引和聚簇索引,具体解释为:UNIQUE:表示此索引的每一个索引值只对应唯一的数据。CLUSTERED:表示要建立的索引时聚簇索引,即索引项的顺序与表中记录的物理顺序一致的索引组织。
关于SQL数据库聚族索引和非聚族索引
CLUSTERED
SQL SERVER中索引类型包括的三种类型分别是哪三种?
唯一索引、聚集索引、非聚集索引
SQL non-clustered 和 clustered index 的区别
clustered index 聚集索引,这类索引是在数据存在一起的。non-clustered 非聚集索引,这类索引是通过找聚集索引来找数据的。两个索引的非叶子节点都是B+或是二叉树之类的,能快速查找的结构。
创建唯一索引的 sql语句
CREATE INDEX 用户名.索引名 ON 用户名.表名(列名) NOLOGGING NOPARALLEL
创建唯一索引的sql语句是什么?
创建唯一索引的sql语句如下:CREATE[UNIQUE|CLUSTERED]INDEXINDEX_NAMEONTABLE_NAME(PROPERTY_NAME)其中UNIQUE和CLUSTERED为可选项,分别是建立唯一索引和聚簇索引。具体解释为:UNIQUE:表示此索引的每一个索引值只对应唯一的数据。CLUSTERED:表示要建立的索引时聚簇索引,即索引项的顺序与表中记录的物理顺序一致的索引组织。
请问sql中的clustered是什么意思?谢谢
指的是聚集索引,索引可分聚集和非聚集索引,这两者区别比较多,但是最主要的区别是:一个表的聚集索引只能有一个,是因为数据行在保存的时候,是按聚集索引的顺序保存的,你可以把它简单的理解成物理存储的位置,这里涉及到页面的概念,你可以查查看。就是物理磁盘上分很多页面,一个有聚集索引的表,他的页面链是按聚集索引排列的,举个例子,如果一个页面已经写满了数据,你要插入一行,如果是非聚集索引,sql会随便找个地方保存,把地址记录进索引,但是如果是聚集索引,会把数据插入到这个页面,而后面的数据同时会往后移动(用页面拆分的办法),看上去速度要慢,但是聚集索引在搜索时,速度会比非聚集索引快,因为他们是物理排序的