怎么经过索引让SQL查询效率最大化--A8站源码交易平台

  • 时间:2020-04-02 11:21 编辑:益达 来源:原创 阅读:1222
  • 扫一扫,手机访问
摘要:在运用联合索引的时分要留心最左原则 最左原则便是需求从左到右的运用索引中的字段,一条SQL语句可以只运用联合索引的一部分,但是需求从最左面开端,否则就会失效。

前语

我们都知道SQL功能调优可以从两个维度去进行优化,一个逻辑查询优化,另一个是物理查询优化。逻辑查询优化便是通过SQL等价变换进步查询功率,直白一点便是说,换一种查询写法实行功率或许更高。物理查询优化则是通过索引和表联接方式等技能来进行优化。当谈到通过索引去优化SQL查询功率,首先我们需求知道创建索引有哪些规矩。
A8站源码交易平台

创建索引有哪些规矩?

创建索引有必定的规矩。当这些规矩出现的时分,我们就可以通过创建索引进步查询功率。A8站源码交易平台

哪些情况下可以创建索引:

1、字段的数值有唯一性的捆绑,比如用户名
索引本身可以起到捆绑的效果,比如唯一索引,主键索引都是可以起到唯一性捆绑的。在数据表中,假设某个字段是唯一性的,就可以直接创建唯一性捆绑,或许主键索引。
2、频频作为 WHERE 查询条件的字段,尤其在数据表大的情况下
3、需求常常 GROUP BY 和ORDER BY 的列
4、UPDATE 、DELETE 的 WHERE 条件列,一般也需求创建索引
5、DISTINCT 字段需求创建索引
做多表JOIN联接操作时,创建索引需求留心以下原则:

联接表的数量尽量不要超过3张,因为每添加一张表就相当于添加了一次嵌套的循环,数量级增长会非常快,严重影响查询的功率
对用于联接的字段创建索引,并且该字段在多张表中的类型有必要共同。A8站源码交易平台
举例:
下面这条SQL运用了JOIN 联接,那么ON 左右两边的字段user_id在product_comment表和在user表中的字段类型有必要共同,而不能一个为int另一个为varchar类型。
SELECT comment_id, comment_text, product_comment.user_id, user_name FROM product_comment JOIN user ON product_comment.user_id = user.user_id
WHERE comment_text = '462eed7ac6e791292a79'

哪些情况下不需求创建索引:

索引不是全能的,有一些情况是不需求创建索引的,比如:
1、WHERE 条件(包括GROUP BY 、ORDER BY)里用不到的字段不需求创建索引,索引的价值是快速定位,假设起不到定位的字段通常是不需求创建索引的。
举例:

SELECT comment_id, product_id, comment_time FROM product_comment WHERE user_id = 41251
1
上面这条SQL是按照user_id来进行检索的,所以不需求对其他字段创建索引,即便这些字段出现在 SELECT 字段中。
2、表记载太少,比如少于1000个,那么是不需求创建索引的。表记载太少,是否创建索引对查询功率的影响并不大。
3、字段中假设有很多重复数据,也不必创建索引,比如性别字段。除此之外还需求考虑数值的散布情况。
4、频频更新的字段不必定要创建索引。因为更新数据的时分,也需求更新索引,假设索引太多,在更新索引的时分也会构成担负,然后影响功率。A8站源码交易平台

什么情况下索引失效

常见的索引失效的比如:
1、假设索引进行了表达式核算,则会失效。
例如:
对comment_id添加了索引,假设SQL实行的过程中对这个字段进行了表达式核算那么索引就会失效。

SELECT comment_id, user_id, comment_text FROM product_comment WHERE comment_id+1 = 900001

2、假设对索引运用函数,也会构成失效。
例如:
对comment_text 字段添加了索引,假设SQL实行的过程中对这个字段进行了substring函数工作,那么索引就会失效。

 SELECT comment_id, user_id, comment_text FROM product_comment WHERE SUBSTRING(comment_text, 1,3)='abc'

3、在WHERE 子句中,假设在OR 前的条件列进行了索引,而在 OR 后的条件列没有进行索引,那么索引会失效。
因而只需一个条件列进行了索引是没有意义的,只需有条件列没有进行索引,就会进行全表扫描,因而索引的条件列也会失效。
例如:

 SELECT comment_id, user_id, comment_text FROM product_comment WHERE comment_id = 900001 OR comment_text = '462eed7ac6e791292a79'

4、当我们运用LIKE 进行模糊查询的时分,后边不能是 % 。

例如:
这个很好了解,假设一本字典按照字母次序进行排序,我们会从首位开端进行匹配,而不会对中心方位进行匹配,否则索引就失效了。

 SELECT comment_id, user_id, comment_text FROM product_comment WHERE comment_text LIKE '%abc'

5、索引列尽量设置为 NOT NULL 捆绑。
这样做的长处是可以更好的运用索引,节省空间,乃至加速SQL的工作。
判别索引列是否为 NOT NULL ,需求走全表扫描,因而最好在规划表的时分就将字段设置为NOT NULL捆绑。
比如可以将INT类型的字段,默认值设置为0。将字符类型的默认值设置为空字符串(’ ')。
6、在运用联合索引的时分要留心最左原则
最左原则便是需求从左到右的运用索引中的字段,一条SQL语句可以只运用联合索引的一部分,但是需求从最左面开端,否则就会失效。A8站源码交易平台

总结

运用好索引可以进步SQL查询的功率。需求留心的是添加索引的数量不是越多越好,索引也是会占有空间的,所以尽或许的扩展索引,而不是新建索引。并且索引数量越多需求保护的本钱也会变大,导致写功率变低。一起我们还需求守时查询运用率低的索引,关于 从未运用过的索引可以进行删去,这样才能让索引在SQL查询中发挥最大价值。A8站源码交易平台

  • 全部评论(0)
最新发布的资讯信息
【A8站-免费源码分享|直播源码】直播系统源码开发:关于安卓开发工具和obs直播推流(2020-10-30 09:41)
【计算机/互联网|】【独家修复】用户定制版短视频点赞系统,支持抖音+快手+刷宝+微视等所有主流短视频评论系统源码(2020-10-26 16:34)
【技术宅-为技术而疯|网站架设教程】【独家首发】最新更新已对接短信2020全新抖音快手点赞任务系统霸屏天下小红书头条威客兼职完整搭建架设视频教程(2020-10-25 13:56)
【技术宅-为技术而疯|网站架设教程】最新可用个人发卡网系统源码完整搭建架设视频教程(2020-10-25 10:53)
【技术宅-为技术而疯|网站架设教程】独家更新全新V10抢单系统唯品会京东淘宝自动抢单区块系统源码全开源抢单收单接单返利+搭建架设完整视频教程(2020-10-25 10:52)
【计算机/互联网|】柔丫纸尿裤云仓系统源码部署(2020-10-15 18:13)
【计算机/互联网|】侏罗纪软件模式定制开发(2020-10-14 15:33)
【计算机/互联网|】S2b2C供应商系统 营销闭环(2020-10-10 17:46)
【计算机/互联网|程序设计开发】盛都汇系统奖励机制(2020-10-10 17:20)
【A8站-免费源码分享|网站源码】积分商城系统APP开发(2020-09-23 14:56)
联系我们
Q Q:3101359898 点击直接对话
电话:18580901894
邮箱:admin#a8zhan.com
时间:09:00 - 24:00
手机二维码 访问手机版
返回顶部