MySQL高级特性都有哪些

60次阅读
没有评论

共计 1380 个字符,预计需要花费 4 分钟才能阅读完成。

今天就跟大家聊聊有关 MySQL 高级特性都有哪些,可能很多人都不太了解,为了让大家更加了解,丸趣 TV 小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

概述

闲来无事,看了下高性能 mysql 这本书,其中的一些 MySQL 高级特性写的还不错,在这里总结分享下。

01. 分区表

1、分区表限制

一张表最多 1024 个分区

分区表中无法使用外键约束

2、分区表注意点

按行写入大量数据时分区过多会出现问题,所以对大多数系统,100 左右个分区是没有问题的

注:键分区和哈希分区没有此问题

3、查询优化

对于访问分区来说,在 where 中带分区列是很重要的(能过滤部分分区)

注:where 中要使用分区函数列本身才能过滤分区,如 where time= 2017,而 where YEAR(time)=2017 错误

02. 视图

1、概念

虚拟表,不存数据,数据来自其他表

2、更新视图

更新列必须来自同一表,且含 GROUP BY、UNION、聚合函数及特殊情况不能更新

3、对性能的影响

重构数据库时可使用视图而不必修改表结构,用视图创建基于列的权限控制减少额外开销等

4、视图的限制

不支持物化视图(即视图在表中不可查看),不支持视图中建索引

03. 外键索引

InnoDB 是 mysql 目前唯一支持外键索引的内置引擎

外键成本:外键每次修改数据时都要求在另一张表多执行一次查找,当然外键在相关数据删除和更新上比在应用中维护更高效。

注:许多案例中发现,在对性能分析时发现外键就是瓶颈所在,删除外键后性能立即大幅提升。

04. 字符集和校对

字符集编码优先级:列 表 数据库

校对规则:_cs、_ci、_bin 分别对应大小写不敏感、大小写敏感、二进制值

05. 全文索引

mysql 不支持中文全文索引,应用其他引擎如 Sphinx 等

06. 分布式 (XA) 事务

企业在分布式多数据库下仍能保证事务的 ACID,这里后面单独介绍。

07. 查询缓存

概念:缓存 select 结果,跳过解析、优化、执行阶段。

查询缓存是完全存储在内存中。mysql 无法为每一个查询结果精确分配大小刚好配匹的缓存空间。

查询缓存如何分配内存来存储结果数据

查询缓存无法 *** 的原因:包含不确定的函数、未处理过该查询、内存用完被逐出

配置和维护查询缓存:

query_cache_type:是否打开查询缓存,设置成 ON、OFF、DEMAND(这个仅在明确写明 SQL_CACHE 下才放入缓存)

query_cache_size:查询缓存使用的总内存空间(值是 1024 整数倍)

query_cache_min_res_unit:查询缓存中分配内存块时的最小单位。

query_cache_limit:MySQL 能缓存的 *** 查询结果

query_cache_wlock_invalidate:某表被锁住,是否仍然从查询缓存返回结果,默认 OFF

通用查询缓存优化:

1) 用多个小表代替一个大表对查询缓存

2)批量写入时只需要做一次缓存失效

3)缓存空间太大,服务器可能僵死,办法是控制大小或禁用

4)用 SQL_CACHE、SQL_NO_CACHE 控制某个 select 是否缓存

5)对于写密集型应用,直接禁用查询缓存更好

注:若需要更高的缓存效率,推荐使用 memcached 或 redis 之类

看完上述内容,你们对 MySQL 高级特性都有哪些有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注丸趣 TV 行业资讯频道,感谢大家的支持。

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-07-19发表,共计1380字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)