数据库相关的各种优化

写在前面

从大学的时候对数据库云里雾里,到毕业上班懵懵懂懂,再到现在几年工作了,我越来越一直到数据库知识的重要性。而且优化这种情况,几乎是必备的,没人会嫌弃CPU快的;面试还是实际开发都得用,都遇得到,所以自己准备总结一下,这里也写了“各种”俩字,以后自己遇到啥新鲜的办法都会来这里更新的,也是为了能多看看,熟练一点。最后,“大言不惭”地把文章定位高级内容吧,毕竟我有一个“当将军”的梦想。

数据库中的SQL语句怎么优化

SQL语句在数据库中占有举足轻重的地位,应聘者不仅需要知道怎样使用SQL语句,而且在使用的过程中还要学会优化, 这样才能提高数据库的性能。本题主要考查SQL语句怎样优化,因此应聘者不仅需要知道什么是SQL语句,还要知道怎样使用SQL语句进行优化。

正文

优化就是通过 WHERE子句使用索引,不可优化即发生了表扫描或额外开销
在数据库中, SQL语句的优化方法有以下几点:
(1)选择最有效率的表名顺序。数据库中的解析器按照从右到左的顺序处理FROM子句中的表名,FROM子句中写在最后的表将被最先处理,在FROM子句中包含多个表的情况下,必须选择记录条数最少的表放在最后,如果有3个以上的表连接查询, 那就需要选择那个被其他表所引用的表放在最后
(2) WHERE 子句中的连接顺序。数据库采用自右而左的顺序解析 WHERE子句,根据这个原理,表之间的连接必须写在其他WHERE条件的左边,这样可以过滤掉最大数量记录的条件必须写在WHERE子句的右边。【这里不明白】
(3)SELECT 子句中避免使用“*”号。数据库在解析的过程中,会将“·”号依次转换成所有的列名, 这个工作是通过查询数据字典完成的,这意味着将耗费更多的时间。
(4)用TRUNCATE 替代DELETE。
(5)尽量多使用COMMIT,因为COMMIT 会释放回滚点。
(6)用WHERE子句替换HAVING子句。 WHERE子句先执行,HAVING子句后执行。
(7)多使用内部函数提高SQL效率。
(8)使用表的别名。
(9)使用列的别名。

数据库应该怎么优化

正文

优化数据库的方法有以下几点:
(1)关键字段建立索引。
(2)使用存储过程,使SQL变得更加灵活和高效。
(3)备份数据库和清除垃圾数据。
(4)SQL语句语法的优化。
(5)清理删除日志。

数据库的索引什么情况下会失效

这个说不上直接和优化有关系,但是这些失效的情况如果都避免了,算不算一种优化呢?或者说一种好的开发习惯是不是一种优化呢?

正文

(1) WHERE子句的查询条件里有WHERE (column! =XXX),MySQL将无法使用索引。
(2) WHERE子句的查询条件中使用了函数, MySQL将无法使用索引。
(3)如果条件中有OR, 即使其中有条件带索引也不会使用,如果想使用OR,又想索引有效,只能将OR条件中的每个列加上索引
(4)对于多列索引,不是使用的第一部分,则不会使用索引
(5) LIKE查询以%开头
(6)如果列类型是字符串,那一定要将条件中的数据加上引号,否则不使用索引。
(7)索引列有函数处理或隐式转换,不使用索引。
感觉和2还有6有点重复
(8)索引列倾斜, 个别值查询时,使用索引的代价比全表扫描高,所以不使用索引。
oracle认为的倾斜列是指在列中最大值和最小值之间分布不均匀
(9)索引列没有限制NOT NULL,索引不存储空值,如果不限制索引列是NOT NULL, Oracle 会认为索引列有可能存在空值,所以不会按照索引计算,因此不使用索引。
where语句中使用了IS NULL或者IS NOT NULL,会造成索引失效

补充

SQL Server 性能的最大改进得益于逻辑的数据库设计、索引设计和查询设计。SQL优化的实质就是在结果正确的前提下, 用优化器可以识别的语句,充分利用索引,减少表扫描的IO次数,尽
量避免表搜索的发生。

SQL 的性能优化是一个复杂的过程,以上这些只是在应用层次的一种体现深入研究还会沙及
数据库层的资源配置、网络层的流量控制以及操作系统层的总体设计

其他链接

自己一直以来都在学习和收集别人的文章,这里就放一些链接吧,也是对自己的一种监督。

MySQL大表优化方案

从标题可以看出,这篇文章是以单张表作为切入点,首先讨论了单表优化的一般条件,然后是字段、索引、SQL语句,以及引擎、系统参数、分区,最后的内容是关于兼容MySQL的数据库和NoSQL。
我把它放在第一个,也是觉得作者的思路很清晰,不是那种堆在一起的看着头疼。而且涉及的优化内容也很全面,尤其是会强调什么情况下才这样选择等等。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值