• SQL性能优化、索引原理、存储过程


    SQL性能优化

    订单导出: SXSSFWorkBook 大型EXCEL文件导出不会内存溢出 用磁盘换内存

    限制100W行、1500

    rightOrderInfo ightInfo ightRuleInfo ightUserInfouserCardInfodrivingOrderInfoparkOrderInfo

    优化前:for循环

    In/exists https://blog.csdn.net/u013825231/article/details/82776721

    in想必大家用的很多吧,原理也是很简单就是和我们上面一样,而exists的原理就不一样了,他是通过子查询返回的数据是否为null,如果不为null,那么就会将当前的数据加入结果集,因此我们select * from a的时候,我们是从第一条数据开始执行的,每次执行都会去执行exists的子查询,如果不为null就加入结果集,反之则不加入,直到最后执行完主查询为止。

    索引原理

    https://www.cnblogs.com/aspwebchh/p/6652855.html

    ·为什么要给表加上主键?

    ·为什么加索引后会使查询变快?

    主键(也叫聚集索引)会将数据结构编程平衡树结构,无主键前查询最大复杂度O(N),添加主键后查询复杂度logaN[a是每个叶节点的分叉数,N是数据总量]

    ·为什么加索引后会使写入、修改、删除变慢?

    增删改数据都会改变平衡树各节点中的索引数据内容,破坏树结构, 因此,在每次数据改变时, DBMS必须去重新梳理树(索引)的结构以确保它的正确,这会带来不小的性能开销,也就是为什么索引会给查询以外的操作带来副作用的原因。

    非主键索引(非聚集索引),每建立一个,该字段的所有数据都会被复制,叶节点的值由 该条数据的主键值+该条数据该字段的值 组成,索引之间没有影响,给表添加索引,会增加表的体积,占用磁盘存储空间。

    非聚集索引和聚集索引的区别在于,通过聚集索引可以直接查到需要查找的数据, 而通过非聚集索引查到记录对应的主键值 ,再使用主键的值通过聚集索引查找到需要的数据,如下图

    有一种例外可以不使用聚集索引就能查询出所需要的数据,复合索引为一个索引指定两个字段

    ·什么情况下要同时在两个字段上建索引?

    存储过程

    • IN 输入参数:表示调用者向过程传入值(传入值可以是字面量或变量)
    • OUT 输出参数:表示过程向调用者传出值(可以返回多个值)(传出值只能是变量)
    • INOUT 输入输出参数:既表示调用者向过程传入值,又表示过程向调用者传出值(值只能是变量)

    https://www.runoob.com/w3cnote/mysql-stored-procedure.html

  • 相关阅读:
    python第二课
    python第一课
    Python基础20-类的创建与删增改查
    Python基础19模块-hashlib模块
    Python基础18模块-configerparse模块
    Python基础17模块-logging模块
    Python基础16模块-re模块
    Python基础-15模块-OS模块
    Python基础-14模块-random模块
    Python基础-13模块-时间模块
  • 原文地址:https://www.cnblogs.com/yfzhou528/p/13521714.html
Copyright © 2020-2023  润新知