下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、表设计和查询的一些参考1合理使用索引索引是数据库中重要的数据结构,它的根本目的就是为了提高查询效率。现在大多数的数据库产品都采用最先提出的索引结构。索引的使用要恰到好处,其使用原则如下:在经常进行连接,但是没有指定为外键的列上建立索引,而不经常连接的字段则由优化器自动生成索引。在频繁进行排序或分组(即进行groupby或orby操作)的列上建立索引。在条件表达式中经常用到的不同值较多的列上建立检索,在不同值少的列上不要建立索引。比如在雇员表的“性别”列上只有“男”与“女”两个不同值,因此就无必要建立索引。如果建立索引不但不会提高查询效率,反而会严重降低更新速度。如果待排序的列有多个,可以在这些
2、列上建立复合索引(opou)。使用系统工具。如or数据库有一个b工具,可以在可疑的索引上进行检查。在一些数据库服务器上,索引可能失效或者因为频繁操作而使得读取效率降低,如果一个使用索引的查询不明不白地慢下来,可以试着用b工具检查索引的完整性,必要时进行修复。另外,当数据库表更新大量数据后,删除并重建索引可以提高查询速度。2避免或简化排序应当简化或避免对大型表进行重复的排序。当能够利用索引自动以适当的次序产生输出时,优化器就避免了排序的步骤。以下是一些影响因素:索引中不包括一个或几个待排序的列;groupby或orrb子句中列的次序与索引的次序不一样;排序的列来自不同的表。为了避免不必要的排序,
3、就要正确地增建索引,合理地合并数据库表(尽管有时可能影响表的规范化,但相对于效率的提高是值得的)。如果排序不可避免,那么应当试图简化它,如缩小排序的列的范围等。3消除对大型表行数据的顺序存取在嵌套查询中,对表的顺序存取对查询效率可能产生致命的影响。比如采用顺序存取策略,一个嵌套3层的查询,如果每层都查询100行0,那么这个查询就要查询10亿行数据。避免这种情况的主要方法就是对连接的列进行索引。例如,两个表:学生表(学号、姓名、年龄)和选课表(学号、课程号、成绩)。如果两个表要做连接,就要在“学号”这个连接字段上建立索引。还可以使用并集来避免顺序存取。尽管在所有的检查列上都有索引,但某些形式的子
4、句强迫优化器使用顺序存取。下面的查询将强迫对orr表执行顺序操作:orderSELECTFROMordersWHERE(customer_num=104order_num=1008虽然在uor和oiur上建有索引,但是在上面的语句中优化器还是使用顺序存取路径扫描整个表。因为这个语句要检索的是分离的行的集合,所以应该改为如下语句:order*orruoruELECTFROMordersWHEREorder_num=1008这样就能利用索引路径处理查询。4避免相关子查询一个列的标签同时在主查询和here子句中的查询中出现,那么很可能当主查询中的列值改变之后,子查询必须重新查询一次。查询嵌套层次越多
5、,效率越低,因此应当尽量避免子查询。如果子查询不可避免,那么要在子查询中过滤掉尽可能多的行。5避免困难的正规表达式MAHE和LIKE关键字支持通配符匹配,技术上叫正规表达式。但这种匹配特别耗费时间。例如:ELETFROMcustomerWHEREzipcodeLIKE“98”即使在zipcode字段上建立了索引,在这种情况下也还是采用顺序扫描的方式。如果把语句改为ELETFROMcustomerWHEREzipcode“98000”,在执行查询时就会利用索引来查询,显然会大大提高速度。另外,还要避免非开始的子串。例如语句:ELETFROMcustomerWHEREzipcode,3“80”,在
6、here子句中采用了非开始子串,因而这个语句也不会使用索引。6使用临时表加速查询把表的一个子集进行排序并创建临时表,有时能加速查询。它有助于避免多重排序操作,而且在其他方面还能简化优化器的工作。例如:SELECTcust.n,armcevbles.bal,anceothercolumnsFROMcust,rcvblesWHEREcust.customer_id=rcvlbes.customer_idANDrcvblls.balance0ANDcust.postcode“98000”ORDERBY如果这个查询要被执行多次而不止一次,可以把所有未付款的客户找出来放在一个临时文件中
7、,并按客户的名字进行排序:SELECTcust.n,armcevbles.bal,anceothercolumnsFROMcust,rcvblesWHEREcust.customer_id=rcvlbes.customer_idANDrcvblls.balance0ORDERBYINTOTEMPcust_with_balance然后以下面的方式在临时表中查询:SELECTTFROMcust_with_balanceWHEREpostcode“98000”临时表中的行要比主表中的行少,而且物理顺序就是所要求的顺序,减少了磁盘I/,O所以查询工作量可以得到大幅减少。注意:临时表创
8、建后不会反映主表的修改。在主表中数据频繁修改的情况下,注意不要丢失数据。7用排序来取代非顺序存取非顺序磁盘存取是最慢的操作,表现在磁盘存取臂的来回移动。语句隐藏了这一情况,使得我们在写应用程序时很容易写出要求存取大量非顺序页的查询。有些时候,用数据库的排序能力来替代非顺序的存取能改进查询。1。表里面存在多个类型的数据,是把表拆开,每个类型一张表,还是就放在一个表里,拆开以后可以分流数据量,但是会导致查询和统计的处理困难。答:对于含有图象数据类型的表还是另设一张表专门用来存储图象比较好.对于图象表:a用这张表可以专门用来存储图片:如果把图象字段放在大表里,那么会给管理和编程带来很大的麻烦,如果图
9、象被存储在大表中,一旦由于图象出现某些错误,那么将会影响整张数据表,那是很危险和很不明智的。:这样也方便以后对各个表的维护。(有的表只维护文本数据,有的表只维护图象数据)2。数据库在维护这样大数据量的单表时需要注意什么?(暂时不考虑什么数据库)答利用磁盘的条带化将你的整张大表放在多个物理磁盘上可以充分的利用计算机的并行操作来提高系统的性能利用可以实现还有很好的容错功能要创建好对于你的查寻有利的索引对于经常更新的表创建索引时要慎重考虑.太多的索引会影响数据库的更新性能.在创建索引时必须设置好填充因子,这样可以避免在对数据表更新时对表中数据页的拆分减少对系统资源的耗费将你的数据库设置成自动创建统计
10、信息和自动更新统计信息,让优化器有最新的统计可以利用来提高系统的查询性能要如果表太大要定期的对表进行维护和检查利包括物理上和逻辑上的)要及时做好对数据的备份要3。如果要建一个表保存历史数据,那么历史数据表和当前的数据表应该怎么组织,才能最好的实现数据的一致和便于查询统计?(现在考虑只在这个单表里面保存大概两个月的数据)现在只是初步有了这几个考虑,以前设计数据库的时候也没有考虑那么多,希望能够借鉴一下大家的经验!答:保存历史数据的表结构最好和当前的表结构一致,才能最好的实现数据的一致和便于查询统计,对于历史记录可以设置成只读的,可以尽量多的创建对你的查询有意义的索引要在你大批量的将数据从当前表导入到历史表中时,可以先将索引删
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 某家具厂客户服务标准
- 某电子厂员工考核办法
- 某电子厂生产流程办法
- 纺织厂布料库存管理细则
- AI与传统古琴文化数字化推广
- 2026年内科主治医师考试备考题及答案
- 公共健康教育试题及答案
- 高中体育理论考试题库及答案
- 会计人性格测试题及答案
- 输血科三基考试题及答案
- T/BIKE 6-2019共享自行车通信协议
- DBJ-T15-231-2021 城市轨道交通既有结构保护监测技术标准
- 新人教版四年级上册数学全册教案含反思
- 《装配式建筑标准化产品系列图集整体卫生间》
- 教育系统网络安全应急演练方案
- 《寄生虫学检验》题库含答案
- 耳穴压豆课件
- 伤口造口护理质量标准
- 大学生职业生涯规划与就业指导全套教学课件
- DL-T904-2015火力发电厂技术经济指标计算方法
- 供应商审核自查表+自评回复模版BYD
评论
0/150
提交评论