备注可以sql建立索引引吗?

可以设置为索引的字段是( )。 A、备注 B、超链接 C、主关键字 D、OLE对象_百度知道
可以设置为索引的字段是( )。 A、备注 B、超链接 C、主关键字 D、OLE对象
提问者采纳
C 才是正确的答案
提问者评价
来自团队:
其他类似问题
为您推荐:
超链接的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁迁安市政府信息公开平台
Copyright 2009 Qianan China All Rights Reserved
本网站由迁安市人民政府办公室主办
版权为迁安市人民政府办公室所有我们做开发的人员,虽说自己不是专业从事数据库方面研究的(如DBA),但很多时候,公司没有专门的DBA,所以拿到具体的项目中,整体的数据库设计都是开发人员自己写的,随着时间的推移,加上开发经验的增长,越来越关心如何设计好的数据库,如何写出高效的sql语句。之所以非常关心数据库及sql语句的写法,主要是在程序逻辑代码上大家都有可能写出一样的效率的功能方法来,而sql语句呢,对于同样的结果集,一个初级的开发人员与一个资深的开发人员或者DBA写出的sql语句执行效率有着很大的差距。这里对数据库设计略过,主要说说正确建立索引,带来的性能提高。(还好,我们公司有DBA,自己写好的sql语句可以让他帮忙看看)
看sql 的性能,主要看执行计划,还有cpu成本,io成本等。这里就以一个简的表为例。
首先,创建一个简单的表,一般会先建个主键,系统自动以主键建聚集索引。语句如下:
Code&1CREATE&TABLE&[dbo].[Article](&2&&&&[Id]&[int]&IDENTITY(1,1)&NOT&FOR&REPLICATION&NOT&NULL,&3&&&&[MsId]&[int]&NOT&NULL,&4&&&&[Title]&[nvarchar](96)&NOT&NULL,&5&&&&[TitleBak]&[nvarchar](96)&NOT&NULL,&6&&&&[Summary]&[nvarchar](512)&NOT&NULL,&7&&&&[SummaryImageUrl]&[nvarchar](256)&NOT&NULL,&8&&&&[Tag]&[nvarchar](50)&NOT&NULL,&9&&&&[ArticleChannel_Id]&[int]&NOT&NULL,<span style="color: #&&&&[ArticleCategory_Id]&[int]&NOT&NULL,<span style="color: #&&&&[IsApproved]&[bit]&NOT&NULL,<span style="color: #&&&&[Creator_Id]&[int]&NOT&NULL,<span style="color: #&&&&[CreatedDateTime]&[datetime]&NOT&NULL,<span style="color: #&&&&[ModifiedDateTime]&[datetime]&NOT&NULL,<span style="color: #&&&&[ViewCount]&[int]&NOT&NULL,<span style="color: #&&&&[ReplyCount]&[int]&NOT&NULL,<span style="color: #&&&&[DiggCount]&[int]&NOT&NULL,<span style="color: #&&&&[FavoriteCount]&[int]&NOT&NULL,<span style="color: #&&&&[LastReplyUser_Id]&[int]&NOT&NULL,<span style="color: #&&&&[LastReplyDateTime]&[datetime]&NOT&NULL,<span style="color: #&&&&[RightType]&[int]&NOT&NULL,<span style="color: #&&&&[IsDisplayContent]&[bit]&NOT&NULL,<span style="color: #&&&&[IsSensitive]&[bit]&NOT&NULL,<span style="color: #&&&&[Source]&[int]&NOT&NULL,<span style="color: #&CONSTRAINT&[PK_Articles]&PRIMARY&KEY&CLUSTERED&<span style="color: #(<span style="color: #&&&&[Id]&ASC<span style="color: #)WITH&(PAD_INDEX&&=&OFF,&STATISTICS_NORECOMPUTE&&=&OFF,&IGNORE_DUP_KEY&=&OFF,&ALLOW_ROW_LOCKS&&=&ON,&ALLOW_PAGE_LOCKS&&=&ON)&ON&[PRIMARY]<span style="color: #)&ON&[PRIMARY]<span style="color: #
填充200000测试数据,
Code&1DECLARE&@number&INT&2SET&@number&=&200000&3&4WHILE&@number&&&0&5BEGIN&6&&&&INSERT&dbo.Article&7&&&&&&(&8&&&&&&&&MsId,&9&&&&&&&&Title,<span style="color: #&&&&&&&&TitleBak,<span style="color: #&&&&&&&&Summary,<span style="color: #&&&&&&&&SummaryImageUrl,<span style="color: #&&&&&&&&<span style="color: #&&&&&&&&Tag,<span style="color: #&&&&&&&&ArticleChannel_Id,<span style="color: #&&&&&&&&ArticleCategory_Id,<span style="color: #&&&&&&&&IsApproved,<span style="color: #&&&&&&&&Creator_Id,<span style="color: #&&&&&&&&<span style="color: #&&&&&&&&CreatedDateTime,<span style="color: #&&&&&&&&ModifiedDateTime,<span style="color: #&&&&&&&&ViewCount,<span style="color: #&&&&&&&&ReplyCount,<span style="color: #&&&&&&&&DiggCount,<span style="color: #&&&&&&&&<span style="color: #&&&&&&&&FavoriteCount,<span style="color: #&&&&&&&&LastReplyUser_Id,<span style="color: #&&&&&&&&LastReplyDateTime,<span style="color: #&&&&&&&&RightType,<span style="color: #&&&&&&&&IsDisplayContent,<span style="color: #&&&&&&&&<span style="color: #&&&&&&&&IsSensitive,<span style="color: #&&&&&&&&Source<span style="color: #&&&&&&)<span style="color: #&&&&VALUES<span style="color: #&&&&&&(<span style="color: #&&&&&&&&&&@number,<span style="color: #&&&&&&&&'Title'+cast(@number&AS&VARCHAR(20)),<span style="color: #&&&&&&&&'TitleBak'+cast(@number&AS&VARCHAR(20)),<span style="color: #&&&&&&&&'Summary'+cast(@number&AS&VARCHAR(20)),<span style="color: #&&&&&&&&'SummaryImageUrl'+cast(@number&AS&VARCHAR(20)),<span style="color: #&&&&&&&&<span style="color: #&&&&&&&&'Tag'+cast(@number&AS&VARCHAR(20)),<span style="color: #&&&&&&&&1,<span style="color: #&&&&&&&&2,<span style="color: #&&&&&&&&0,<span style="color: #&&&&&&&&@number,<span style="color: #&&&&&&&&<span style="color: #&&&&&&&&GETDATE(),<span style="color: #&&&&&&&GETDATE(),<span style="color: #&&&&&&&&100,<span style="color: #&&&&&&&&29,<span style="color: #&&&&&&&&123,<span style="color: #&&&&&&&&<span style="color: #&&&&&&&&12,<span style="color: #&&&&&&&&@number,<span style="color: #&&&&&&&&GETDATE(),<span style="color: #&&&&&&&&1,<span style="color: #&&&&&&&&0,<span style="color: #&&&&&&&&<span style="color: #&&&&&&&&0,<span style="color: #&&&&&&&&2<span style="color: #&&&&&&&&&&<span style="color: #&&&&&&)<span style="color: #&&&&&&SET&@number=@number-1<span style="color: #END<span style="color: #
创建索引,什么时候创建,为哪个字段创建等等一系列的问题在这里统统的撂下,在这里进行一步步的带有试探的创建非聚集索引,看看建立索引前后以及不同的索引会有什么样的不同。
先说明一下,通过执行计划,判断是否需要优化sql的一个简单规则是:看执行计划中的操作是seek(搜索)还是scan(扫描)
长话短说,马上开始,
WITH&TEMP&AS(SELECT&ROW_NUMBER()&OVER&(ORDER&BY&CreatedDateTime)&AS&ROW,CreatedDateTime,ViewCountFROM&ArticleWHERE&Creator_Id=199996&)SELECT&*FROM&TEMPWHERE&ROW&BETWEEN&1&AND&5
通过执行计划,看到是操作是聚集索引扫描。我们刚才说了,seek操作性能更好一些,那如何优化这条语句呢,对Creator_Id建非聚集索引。
&创建Ix_article_creatorid 索引,
CREATE INDEX Ix_article_creatorid ON Article(Creator_Id)
再看下执行计划,
哦,加了Ix_article_creatorid索引后,聚集索引扫描操作改为索引查找和聚集索引查找,对于我们开发人员来说,一般的认为可以了。如果所开发的系统在正常运行一段时间后,需要优化,可以对此语句继续进行优化。
看完执行计划,想到了应该再看看cpu占用时间,IO资源等情况,主要用到命令
set statistics io 和 set statistics,这是性能调优时查看相关cpu占用时间,IO资源数据的两个比较重要的命令。
&&&&&&&&今天就先到了,下篇再介绍这两个命令吧。
&&&&&&&& 其实没有详细介绍如何创建高效性能的索引,主要原因是根据不同的环境对待系统的要求不同,而优化也有所不同,当一个系统查询比较频繁,而新建,修改等操作比较少时,可以创建覆盖索引,将查询字段和where子句里的字段全部包含在内,这样查询的速度会比以前快很多,同时也带来弊端,就是新建或修改等操作时,比没有索引或没有建立覆盖索引时的要慢。总结一句话就是,具体问题具体分析。
&&&&&&&& 数据库里的知识也是博大精深,并不是当初认为会写几条sq&&&&&&&& l语句就以为非常精通了数据库什么的,真正要写出好的语句,得下功夫,了解数据库的底层,再经常问问DB牛人,慢慢积累后,也许你也能成为DB牛人呢。总结一句话就是,只要功夫深,铁杵磨成针。
阅读(...) 评论()Mysql建表与索引使用规范详解
字体:[ ] 类型:转载 时间:
本篇文章是对Mysql建表和索引使用规范进行了详细的分析介绍,需要的朋友参考下
一、 MySQL建表,字段需设置为非空,需设置字段默认值。二、 MySQL建表,字段需NULL时,需设置字段默认值,默认值不为NULL。三、 MySQL建表,如果字段等价于外键,应在该字段加索引。四、 MySQL建表,不同表之间的相同属性值的字段,列类型,类型长度,是否非空,是否默认值,需保持一致,否则无法正确使用索引进行关联对比。五、 MySQL使用时,一条SQL语句只能使用一个表的一个索引。所有的字段类型都可以索引,多列索引的属性最多15个。六、 如果可以在多个索引中进行选择,MySQL通常使用找到最少行的索引,索引唯一值最高的索引。七、 建立索引index(part1,part2,part3),相当于建立了 index(part1),index(part1,part2)和index(part1,part2,part3)三个索引。八、 MySQL针对like语法必须如下格式才使用索引:&&&& SELECT * FROM t1 WHERE key_col LIKE 'ab%' ;九、 SELECT COUNT(*) 语法在没有where条件的语句中执行效率没有SELECT COUNT(col_name)快,但是在有where条件的语句中执行效率要快。十、 在where条件中多个and的条件中,必须都是一个多列索引的key_part属性而且必须包含key_part1。各自单一索引的话,只使用遍历最少行的那个索引。十一、 在where条件中多个or的条件中,每一个条件,都必须是一个有效索引。十二、 ORDER BY 后面的条件必须是同一索引的属性,排序顺序必须一致(比如都是升序或都是降序)。十三、 所有GROUP BY列引用同一索引的属性,并且索引必须是按顺序保存其关键字的。十四、 JOIN 索引,所有匹配ON和where的字段应建立合适的索引。十五、 对智能的扫描全表使用FORCE INDEX告知MySQL,使用索引效率更高。十六、 定期ANALYZE TABLE tbl_name为扫描的表更新关键字分布 。十七、 定期使用慢日志检查语句,执行explain,分析可能改进的索引。十八、 条件允许的话,设置较大的key_buffer_size和query_cache_size的值(全局参数),和sort_buffer_size的值(session变量,建议不要超过4M)。备注主键的命名采用如下规则:主键名用pk_开头,后面跟该主键所在的表名。主键名长度不能超过30个字符。如果过长,可对表名进行缩写。缩写规则同表名的缩写规则。主键名用小写的英文单词来表示。&外键的命名采用如下规则:外键名用fk_开头,后面跟该外键所在的表名和对应的主表名(不含t_)。子表名和父表名自己用下划线(_)分隔。外键名长度不能超过30个字符。如果过长,可对表名进行缩写。缩写规则同表名的缩写规则。外键名用小写的英文单词来表示。索引的命名采用如下规则:1)索引名用小写的英文字母和数字表示。索引名的长度不能超过30个字符。2)主键对应的索引和主键同名。3)唯一性索引用uni_开头,后面跟表名。一般性索引用ind_开头,后面跟表名。4)如果索引长度过长,可对表名进行缩写。缩写规则同表名的缩写规则index 相关语法例:CREATE INDEX log_url ON logaudit_log(url);show index from logaudit_logdrop index log_request_time on logaudit_log
sql执行效率检测 mysql explainexplain显示了mysql如何使用索引来处理select语句以及连接表。可以帮助选择更好的索引和写出更优化的查询语句。使用方法,在select语句前加上explain就可以了:如:explain select surname,first_name form a,b where a.id=b.id分析结果形式如下:table |& type | possible_keys | key | key_len& | ref | rows | ExtraEXPLAIN列的解释:table显示这一行的数据是关于哪张表的type这是重要的列,显示连接使用了何种类型。从最好到最差的连接类型为const、eq_reg、ref、range、indexhe和ALLpossible_keys显示可能应用在这张表中的索引。如果为空,没有可能的索引。可以为相关的域从WHERE语句中选择一个合适的语句key实际使用的索引。如果为NULL,则没有使用索引。很少的情况下,MYSQL会选择优化不足的索引。这种情况下,可以在SELECT语句中使用USEINDEX(indexname)来强制使用一个索引或者用IGNORE INDEX(indexname)来强制MYSQL忽略索引key_len使用的索引的长度。在不损失精确性的情况下,长度越短越好ref显示索引的哪一列被使用了,如果可能的话,是一个常数rowsMYSQL认为必须检查的用来返回请求数据的行数Extra关于MYSQL如何解析查询的额外信息。将在表4.3中讨论,但这里可以看到的坏的例子是Using temporary和Using filesort,意思MYSQL根本不能使用索引,结果是检索会很慢extra列返回的描述的意义Distinct一旦MYSQL找到了与行相联合匹配的行,就不再搜索了Not existsMYSQL优化了LEFT JOIN,一旦它找到了匹配LEFT JOIN标准的行,就不再搜索了Range checked for eachRecord(index map:#)没有找到理想的索引,因此对于从前面表中来的每一个行组合,MYSQL检查使用哪个索引,并用它来从表中返回行。这是使用索引的最慢的连接之一Using filesort看到这个的时候,查询就需要优化了。MYSQL需要进行额外的步骤来发现如何对返回的行排序。它根据连接类型以及存储排序键值和匹配条件的全部行的行指针来排序全部行Using index列数据是从仅仅使用了索引中的信息而没有读取实际的行动的表返回的,这发生在对表的全部的请求列都是同一个索引的部分的时候Using temporary看到这个的时候,查询需要优化了。这里,MYSQL需要创建一个临时表来存储结果,这通常发生在对不同的列集进行ORDER BY上,而不是GROUP BY上Where used使用了WHERE从句来限制哪些行将与下一张表匹配或者是返回给用户。如果不想返回表中的全部行,并且连接类型ALL或index,这就会发生,或者是查询有问题不同连接类型的解释(按照效率高低的顺序排序)system表只有一行:system表。这是const连接类型的特殊情况const表中的一个记录的最大值能够匹配这个查询(索引可以是主键或惟一索引)。因为只有一行,这个值实际就是常数,因为MYSQL先读这个值然后把它当做常数来对待eq_ref在连接中,MYSQL在查询时,从前面的表中,对每一个记录的联合都从表中读取一个记录,它在查询使用了索引为主键或惟一键的全部时使用ref这个连接类型只有在查询使用了不是惟一或主键的键或者是这些类型的部分(比如,利用最左边前缀)时发生。对于之前的表的每一个行联合,全部记录都将从表中读出。这个类型严重依赖于根据索引匹配的记录多少—越少越好range这个连接类型使用索引返回一个范围中的行,比如使用&或FAQ1表中包含 10 万条记录,有一个 datetime 类型的字段。取数据的语句:SELECT * FROM my_table WHERE created_at & '';用 EXPLAIN 检查,发现 type 是 ALL, key 是 NULL,根本没用上索引。可以确定的是,created_at 字段设定索引了。什么原因呢?用 SELECT COUNT(*) 看了一下符合 WHERE 条件的记录总数,居然是 6W 多条!!难怪不用索引,这时用索引毫无意义,就好像 10 万条记录的用户表,有个性别字段,不是男就是女,在这种字段设置索引是错误的决定。稍微改造一下上述语句:SELECT * FROM my_table WHERE created_at BETWEEN '' AND '';这回问题解决!符合条件的记录只有几百条,EXPLAIN 的 type 是 range,key 是 created_at,Extra 是 Using where 。自己总结个准则,索引的目的就是尽量缩小结果集,这样才能做到快速查询。6万条记录符合条件,已经超出总记录数的一半,这时索引已经没有意义了,因此 MySQL 放弃使用索引。这与设置 gender 字段,并加上索引的情况相似,当你要把所有男性记录都选取出来,符合条件的记录数约占总数的一半,MySQL 同样不会使用这个索引。唯一值越多的字段,使用索引的效果越好。设置联合索引时,唯一值越多的,越应该放在“左侧”。
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具visual FoxPRO(VFP)复习题(选择题)答案_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
visual FoxPRO(VFP)复习题(选择题)答案
上传于||文档简介
&&选&#8203;填&#8203;,&#8203;简&#8203;要&#8203;介&#8203;绍&#8203;文&#8203;档&#8203;的&#8203;主&#8203;要&#8203;内&#8203;容&#8203;,&#8203;方&#8203;便&#8203;文&#8203;档&#8203;被&#8203;更&#8203;多&#8203;人&#8203;浏&#8203;览&#8203;和&#8203;下&#8203;载&#8203;。
阅读已结束,如果下载本文需要使用
想免费下载本文?
下载文档到电脑,查找使用更方便
还剩4页未读,继续阅读
你可能喜欢

我要回帖

更多关于 视图可以建立索引吗 的文章

 

随机推荐