zoukankan      html  css  js  c++  java
  • 4、mysql高级特性

    1.分区表:

        概念:

            底层用多个物理子表组成。对于应用层来说可以不做变化,我们无需改变原有的SQL语句

            建表时使用PARTITION  BY定义每个分区存放的数据

        原理:

            打开并锁住所有的底层表,优化器判断可过滤的分区,继而进行增删改查

        适用场景:

            1.表很大无法全部放到内存中(查询的时候过滤掉一些分区,无需扫全表)

            2.更易于维护(删除的时候可以删除整个分区)

            3.分区表的数据可以分布在不同物理设备上,可以高效的利用多个硬件设备

            4.备份,恢复独立的分区。这在非常大的数据集的场景下效果非常好

    2.视图:

        概念:

            视图本身是一个虚拟表,不存放任何数据。使用sql语句访问视图的时候,它返回的数据是从其他表生成的。(表的数据变了,视图的结果自然也变了)

        优点:

            1)利用视图可以简化查询语句

            2)可以进行权限的控制(把表的权限封闭,但是开放相应的视图权限,视图里只开放部分数据列)

            3)  某些情况下视图也可以提升性能(极少数的情况下)

        视图不可更新的情况:

            如果视图包含:聚合函数   SUM(), MIN(), MAX(), COUNT() 等,DISTINCT,GROUP BY,HAVING,UNION,UNION ALL,Join等。那么它就是不可更新的。

    3.外键约束(带来很多额外消耗,不推荐用):

            InnoDB是目前MySql中唯一支持外键的内置存储引擎。

            外键有成本的,修改数据的时候都要在另一张表多执行一次查找操作。

            外键约束使得查询需要额外访问一些别的表,意味着需要额外的锁。

            外键在相关数据的删除和更新上也比在应用中维护更高效。

    4. 在mysql内部存储代码:

        存储过程:

            提高执行速度 (很大程度是因为它无须网络通信开销,解析开销和优化器开销等)

        触发器:

            在执行insert,update或者delete的时候,执行一些特定的操作

            基于行触发,每个表的每一个事件只能绑定一个触发器。

        事件:

            完全在mysql内部实现的,类似linux的定时任务,每隔一段时间执行一段sql代码(通常将复杂的sql封装到存储过程中,执行的时候只需要做一个简单的call调用)。并且执行事件所创建的线程也会在执行结束后销毁,不会放在线程缓存中。

        在存储程序中保留注释:

            指定一个极大的版本号,类似于99999

    5.游标:

            指向存储在临时表中的对象。因此是只读的。逐行指向查询结果。

    6.绑定变量:

        好处:

            1.解析一次sql
            2.执行计划会有部分缓存
            3.二进制的方式只发送参数和句柄减少通信量

            bind_param("sss", firstname,lastname, $email);  
            该函数绑定了 SQL 的参数,且告诉数据库参数的值。 "sss" 参数列处理其余参数的数据类型。s 字符告诉数据库该参数为字符串。

    7.自定义函数:

            函数存储着一系列sql语句,调用函数就是一次性执行这些语句。所以函数可以降低语句重复。(但注意的是函数注重返回值,不注重执行过程,所以一些语句无法执行。所以函数并不是单纯的sql语句集合)

    8.字符集:

            如果是使用UTF-8,临时表和缓冲区会按照每个字符3个字节的最大占用空间来分配存储空间。这可能会消耗更多的内存或磁盘空间。并且注意让字符集和mysql字符集配置相符合,否则可能会出现由于字符集转换让某些索引无法正常使用的情况。

    9.全文索引:

            MyISAM因为在锁粒度和崩溃恢复上的缺点,使得在大型全文索引场景中基本无法使用。我们通常帮助客户端构建和使用Sphinx来解决全文索引问题。

    10. 分布式(XA)事务:

            XA事务是一种在多个服务器之间同步数据的方法,如果由于某些原因不能使用MySQL本身的复制,或者性能并不是瓶颈的时候,可以尝试使用。

    11.查询缓存:

            完全相同的查询在重复执行的时候,查询缓存可以立即返回结果,无需在数据库中重新执行一次。
            实质上是缓存 SQL 的 Hash 值和该 SQL 的查询结果,如果运行相同的 SQL,服务器直接从缓存中取结果。

            表的数据有一条发生变化,那么和这个表相关的缓存数据都将失效。

            如果查询缓存的作用很大的话,那就配置一个很小的查询缓存空间(比如几十兆)

    Linux等环境软件安装
  • 相关阅读:
    【原】csv文件导入MySQL数据库的实践
    【原】两个时间相加的运算符重载实现
    【转】趣味题:"Hello,world"的输出
    【转】WordPress源码解读(3)
    轻松记住大端小端的含义(附对大端和小端的解释)
    《编程精粹》书摘与读书笔记
    malloc/free函数的简单实现及思考
    如何写出正确的二分查找?——利用循环不变式理解二分查找及其变体的正确性以及构造方式
    Essential C++学习笔记备忘
    Linux中随手可得的测试、调试、性能检验工具
  • 原文地址:https://www.cnblogs.com/Adam-Ye/p/14850922.html
Copyright © 2011-2022 走看看