热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

数据库优化_数据库优化——索引

篇首语:本文由编程笔记#小编为大家整理,主要介绍了数据库优化——索引相关的知识,希望对你有一定的参考价值。

篇首语:本文由编程笔记#小编为大家整理,主要介绍了数据库优化——索引相关的知识,希望对你有一定的参考价值。










数据库优化——索引




















数据库优化——索引








一直以来对于索引的概念都比较模糊。现在诚心诚意的百度一下~


索引:数据库中的索引类似于一本书的目录,在一本书中使用目录可以快速找到你想要的信息,而不需要读完全书。在数据库中,数据库程序使用索引可以重定向到表中的数据,而不必扫描整个表。书中的目录是一个字词以及各字词所在的页码列表,数据库中的索引是表中的值以及各值存储位置的列表。


既然索引这么方便,那多建一些岂不是特别方便了?肯定是不可能的,书本的目录建立的越多,当需要更新书本内容的时候目录的更新负担也会随之增加的。所以适当的索引是好事,如果索引建立的太多那对应的删除、更新、增加操作的负担就会随之繁重了。













索引虽然好用,可是,你的索引,被用到了嘛?


今天在看索引优化的内容突然翻到了索引还有失效的时候,庆幸我在还没有踩坑之前就看到了这一节,和大家一起分享一下。











索引失效的可能有以下几种:



  1. 在索引字段上进行运算



Select  *  from Test..people


where  money_1*1.2 > 1000


以上的这种写法会让money_1这个索引字段失效,可以换一种写法:


Select  *  from Test..people 


where  money_1 > 1000/1.2


注:使用索引时左边应该是原始字段。


  2. 使用is null谓词时


索引的字段是不存在null的,所以被指定is null 或者 is not null 都会使索引无法使用


Select * from Test..people where money_1 is null


解决这类的问题可以假设money_1列存在最小的值,比如最小值为1。可以换个写法


Select * from Test..people wher money_1 > 0


  3. 使用否定形式


     <>


     !=


     Not in


Select * from Test..people


where money_1 <> 1000


  4. 使用or


使用联合索引时,如果使用or连接条件,要么用不到索引,要么效率会比and差很多。


Select * from Test..people


where


         money_1 > 800


    or money_2 <1000


  5. 使用联合索引时,列的顺序错误,


假设存在一个联合索引‘money_1,money_2,money_3’


在写查询条件时money_1必须在第一位,后面按序排列,不能乱序,也不能倒序。否则会影响查询效率。


  6. 使用like 进行后方一致或者中间一致的匹配


Select * from Test..people


where name_1 like ‘%a’


Select * from Test..people


where name_1 like ‘%a%’


使用like谓词时,只有前方一致的匹配才能用到索引


Select * from Test..people where name_1 like ‘a%’


  7. 应用到转换或函数时


Select * from Test..people where name_1 = 10


因为name_1字段类型是nvarchar(50),当赋值为10时会隐式的执行一个类型转换,将10转成‘10’。此时会导致索引失败。


Select * from Test..people where name_1 = convert(varchar,10)


可以如上这种写法,在表达式的右边进行类型转换。


Select * from upper/lower(upper(A.NAME)


当使用这些转换函数时,也会使索引失败












一起学习,共同进步,祝大家周末愉快~





推荐阅读
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • 本文详细介绍了SQL日志收缩的方法,包括截断日志和删除不需要的旧日志记录。通过备份日志和使用DBCC SHRINKFILE命令可以实现日志的收缩。同时,还介绍了截断日志的原理和注意事项,包括不能截断事务日志的活动部分和MinLSN的确定方法。通过本文的方法,可以有效减小逻辑日志的大小,提高数据库的性能。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • 本文介绍了使用Java实现大数乘法的分治算法,包括输入数据的处理、普通大数乘法的结果和Karatsuba大数乘法的结果。通过改变long类型可以适应不同范围的大数乘法计算。 ... [详细]
  • PHP设置MySQL字符集的方法及使用mysqli_set_charset函数
    本文介绍了PHP设置MySQL字符集的方法,详细介绍了使用mysqli_set_charset函数来规定与数据库服务器进行数据传送时要使用的字符集。通过示例代码演示了如何设置默认客户端字符集。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • 本文由编程笔记小编整理,介绍了PHP中的MySQL函数库及其常用函数,包括mysql_connect、mysql_error、mysql_select_db、mysql_query、mysql_affected_row、mysql_close等。希望对读者有一定的参考价值。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • 基于事件驱动的并发编程及其消息通信机制的同步与异步、阻塞与非阻塞、IO模型的分类
    本文介绍了基于事件驱动的并发编程中的消息通信机制,包括同步和异步的概念及其区别,阻塞和非阻塞的状态,以及IO模型的分类。同步阻塞IO、同步非阻塞IO、异步阻塞IO和异步非阻塞IO等不同的IO模型被详细解释。这些概念和模型对于理解并发编程中的消息通信和IO操作具有重要意义。 ... [详细]
  • Java String与StringBuffer的区别及其应用场景
    本文主要介绍了Java中String和StringBuffer的区别,String是不可变的,而StringBuffer是可变的。StringBuffer在进行字符串处理时不生成新的对象,内存使用上要优于String类。因此,在需要频繁对字符串进行修改的情况下,使用StringBuffer更加适合。同时,文章还介绍了String和StringBuffer的应用场景。 ... [详细]
  • 解决Cydia数据库错误:could not open file /var/lib/dpkg/status 的方法
    本文介绍了解决iOS系统中Cydia数据库错误的方法。通过使用苹果电脑上的Impactor工具和NewTerm软件,以及ifunbox工具和终端命令,可以解决该问题。具体步骤包括下载所需工具、连接手机到电脑、安装NewTerm、下载ifunbox并注册Dropbox账号、下载并解压lib.zip文件、将lib文件夹拖入Books文件夹中,并将lib文件夹拷贝到/var/目录下。以上方法适用于已经越狱且出现Cydia数据库错误的iPhone手机。 ... [详细]
  • 开发笔记:select from具体执行相关知识介绍及案例分析
    本文由编程笔记小编整理,主要介绍了select from具体执行相关的知识,包括数据插入、查询最小rowID、查询每个重复名字的最小rowID、删除重复数据等操作,并提供了案例分析。希望对读者有一定的参考价值。 ... [详细]
  • 高质量SQL书写的30条建议
    本文提供了30条关于优化SQL的建议,包括避免使用select *,使用具体字段,以及使用limit 1等。这些建议是基于实际开发经验总结出来的,旨在帮助读者优化SQL查询。 ... [详细]
  • 前景:当UI一个查询条件为多项选择,或录入多个条件的时候,比如查询所有名称里面包含以下动态条件,需要模糊查询里面每一项时比如是这样一个数组条件:newstring[]{兴业银行, ... [详细]
  • 众筹商城与传统商城的区别及php众筹网站的程序源码
    本文介绍了众筹商城与传统商城的区别,包括所售产品和玩法不同以及运营方式不同。同时还提到了php众筹网站的程序源码和方维众筹的安装和环境问题。 ... [详细]
author-avatar
曾家宏惠茹冠宇
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有