`
风雪涟漪
  • 浏览: 508616 次
  • 性别: Icon_minigender_1
  • 来自: 大连->北京
博客专栏
952ab666-b589-3ca9-8be6-3772bb8d36d4
搜索引擎基础(Search...
浏览量:9069
Ae468720-c1b2-3218-bad0-65e2f3d5477e
SEO策略
浏览量:18481
社区版块
存档分类
最新评论

Schema的优化和索引 - 关于存储引擎的简单记录

阅读更多

这一章的结束,我们来说一下关于设计模型的存储引擎的选择,这些你应该牢记。我们不会全面的介绍存储引擎,目标就是列出一些影响数据模型设计的一些关键性因素。

 

MyISAM存储引擎

表锁(Table locks)

MyISAM是表一级的锁。小心地是这个不会成为一个瓶颈。

 

没有自动数据恢复(No automated data recovery)

如果MySQL服务器挂了或者电源关闭。你应该在使用表之前来修复MyISAM表。如果有个大表,这个过程可能会持续几个小时。

 

不支持事物(No transactions)

MyISAM不支持事物。事实上,MyISAM表不能保证一个单独的语句会执行完成。如果一个错误发生在多个UPDATE之中,一些行被更新而另外的行并不会更新。

 

只有索引会被缓存(Only indexes are cached in memory)

在MySQL进程内部,关键的缓冲区中,MyISAM只会缓存索引。操作系统缓存了表的数据,因此在MySQL5.0中,要想获取数据,就需要操作系统的调用。这个过程消耗是较大的。

 

压缩存储(Compact storage)

每一行都是紧挨着的,因此需要的硬盘就会小并且全表扫描就会很快。


Memory存储引擎

表锁(Table locks)

像MyISAM表一样,Memory表支持表锁。这不是个问题,因为语句都是在内存中执行的。非常快。

 

没有动态的行(No dynamic rows)

Memory表不支持动态(比如,变量的长度)行,因此它们不支持BLOB,TEXT字段。一个VARCHAR(5000)转为CHAR(5000)-如果大部分数据都是小的话,就会浪费大量内存。

 

Hash索引是默认的索引类型(Hash indexes are the default index type)

不像其他的存储引擎,它的默认索引类型是hash。

 

没有索引统计(No index statistics)

Memory表不支持索引统计,因此可能对于复杂的查询,执行很不理想。

 

重启动后内容丢失(Content is lost on restart)

Memory不会持久化任何数据。因此服务器重启后,数据都会丢失,但表还是存在的。

 

InnoDB存储引擎

事物(Transactional)

InnoDB支持事物,并且支持4个级别的事物隔离级别。

 

外键(Foreign keys)

MySQL5.0,InnoDB是唯一支持外键的存储引擎。其他存储引擎在CREATE TABLE时可以创建外键,但是不会约束。一些第三方引擎,比如solidDB以及PBXT,在存储引擎级别支持它们。MySQL AB准备在服务器级别支持外键。

 

行锁(Row-level locks)

锁在行的一级。没有扩大和非阻塞的select-标准的select不会设置任意的锁。这样并发性比较好。

 

多版本(Multiversioning)

InnoDB使用多版本并发控制,因此默认的你的select会读取健壮的数据。事实上,MVCC架构添加了很多复杂性和可能的意外现象。你应该仔细阅读InnoDB手册。

 

通过主键来聚簇(Clustering by primary key)

所有的InnoDB表都是通过主键来聚簇的。这个可以用来更高级别的数据模型设计。

 

所有的索引都包含主键列(All indexes contain the primary key columns)

索引用主键来引用行。如果你的主键很长,那么索引的增长会特别快速。

 

缓存的优化(Optimized caching)

在缓冲池,InnoDB缓存了数据和内存。它也自动创建Hash索引来加速行的获取。

 

无压缩的索引(Unpacked indexes)

索引并没有前缀压缩。因此它们要大于MyISAM表的索引。

 

数据读取缓慢(Slow data load)

MySQL5.0,InnoDB没有优化读取数据的操作。它一次给一行创建了索引。而并不是排序的创建它们。这就导致读取数据很慢。

 

阻塞的AUTO_INCREMENT(Blocking AUTO_INCREMENT)

在MySQL5.1较早的版本,InnoDB使用表级别的锁来生成AUTO_INCREMENT值。

 

不会缓存COUNT(*)的值

不像MyISAM表或者Memory表,InnoDB表并不存储表的行数。也就是说没有WHERE条件的COUNT(*)并不会优化,并且需要整个表的扫描。下一章会说优化COUNT()语句。

 

 

 

 

分享到:
评论

相关推荐

    Mysql性能优化教程.doc

    - B树索引中的数据存储是有序的,因此可以通过索引直接定位到特定的数据记录,避免全表扫描。 - 查询效率接近二分查找算法(log₂N),大大减少了查找所需的时间。 - **如何理解数据索引的结构**: - 默认情况下,...

    MySQL5.7-optmization

    - 了解不同存储引擎如何管理和维护索引统计信息,以便更好地优化查询。 - InnoDB和MyISAM在索引管理方面有所不同,需要针对每种情况采取不同的策略。 8. **B-树与哈希索引比较** - 比较两种索引类型的优缺点,...

    mysql优化方案

    在 Schema 设计优化中,我们需要使用合适的存储引擎,例如 InnoDB 引擎,which 可以缓存索引+数据,并且具有高并发性、数据一致性和 Crash Recovery 等特点。此外,我们还需要设计自增列主键,使用 INT UNSIGNED ...

    NTSE:面向大型互联网应用优化的MySQL存储引擎.pdf

    《NTSE:面向大型互联网应用优化的MySQL存储引擎》这篇文档详细介绍了NTSE(Netease Transaction Safe Engine),这是网易公司为大型互联网应用定制的一款优化过的MySQL存储引擎。NTSE在设计上着重考虑了高可用性、...

    MySQL 5.6中备份及还原performance_schema配置

    `performance_schema`是一个虚拟的存储引擎,它不实际存储用户数据,而是存储性能相关的元数据。这些元数据包括系统对象(如表、索引)的信息,以及事件(如SQL语句执行、等待事件)的统计信息。通过对这些数据的...

    十三MySQL性能优化详解.pdf

    优化是一个复杂的任务,本文描述 MySQL 相关的数据库设计和查询优化、服务器端优化、存储引擎优化。 数据库设计和查询优化 在 MySQL 性能优化中,首先要考虑的就是 Database Schema 设计,这一点是非常重要的。一...

    MySQL优化文档笔记

    MySQL优化是数据库管理中至关重要的任务,涉及到多个层面,包括SQL语句的编写、系统配置、存储引擎选择以及数据类型优化等。以下是对这些关键点的详细解释: 首先,MySQL Server的核心组件包括连接器、分析器、优化...

    MySQL数据库高效使用规范.docx.zip_MYSQL_mysql 优化_mysql优化

    这份“MySQL数据库高效使用规范”文档旨在提供关于如何优化MySQL性能、遵循最佳实践以及编写高效SQL代码的指导。 1. **SQL语句优化** - **避免全表扫描**:尽可能使用索引来加速查询,避免在WHERE子句中使用不等于...

    使用information_schema.tables查询数据库和数据表信息1

    `information_schema`是一个特殊的系统数据库,它提供了一种方便的方式来获取关于所有数据库、表、列、存储引擎和其他元数据的信息。在这个主题中,我们将深入探讨如何利用`information_schema.tables`来查询数据库...

    MySQL性能优化详解.docx

    MySQL性能优化是一项复杂的任务,需要综合考虑数据库设计、查询优化、服务器端配置和存储引擎等多个因素。通过对上述策略的实施,可以在很大程度上提升MySQL数据库的性能表现,从而更好地支持高负载的应用场景。

    MySQL优化大揭秘.rar

    3. **存储引擎优化**: - **InnoDB与MyISAM**:InnoDB支持事务处理,适用于高并发场景;MyISAM写入速度快,但不支持事务,适用于读多写少的应用。 - **内存配置**:调整缓冲池大小以适应应用需求,减少磁盘I/O。 ...

    MYSQL优化实施方案

    - **风险与复杂性**:优化往往不是在一个简单的环境中进行,而是在一个已经投入使用的复杂系统中进行。 - **潜在的风险**:优化手段本身就带有一定的风险,有时候这些风险甚至超出了我们的认知和预见。 - **技术的双...

    开源企业搜索引擎SOLR的应用教程

    - **定义**: Solr的Schema定义了文档中的字段类型、索引方式以及存储方式等。 - **灵活性**: Schema允许用户自定义字段的数据类型,支持多种字段类型如String、Date、Numeric等,并且可以指定哪些字段需要被索引或...

    MYSQL使用心得(三)----性能与管理优化

    同时,定期分析和优化索引,如使用ANALYZE TABLE更新统计信息,或使用OPTIMIZE TABLE整理表结构,以保持索引效率。 管理优化方面,定期备份是防止数据丢失的重要措施,可以使用mysqldump工具进行逻辑备份,或者利用...

    MySQL性能优化实践.docx

    MySQL性能优化实践主要涉及到多个方面,包括选择合适的存储引擎、索引优化、SQL查询优化以及系统配置等。本文将深入探讨这些关键知识点。 首先,MySQL适用于多种场景,如Web网站系统、日志记录系统、数据仓库系统和...

    solr schema solrconfig 配置文件解析

    Solr,作为一款开源的全文搜索引擎,其核心配置文件包括`schema.xml`和`solrconfig.xml`,它们是Solr工作方式的基础。在深入理解这两个文件之前,我们需要先了解Solr的基本架构。 **1. Solr架构简介** Solr采用...

    solr 企业搜索引擎教程

    - **综合统计信息**:提供关于缓存使用、更新和查询的统计信息。 - **文本分析调试**:可视化展示文本分析流程的各个阶段。 - **基于Web的查询调试**:帮助开发者理解和优化查询结果。 #### 3. Solr 的服务原理 ...

    MySQL性能优化

    - **定期分析与优化索引**:ANALYZE TABLE和OPTIMIZE TABLE命令能帮助更新统计信息和整理数据碎片。 - **合理的备份策略**:定期备份数据库,以防数据丢失,同时可以利用备份进行性能测试。 8. **代码层面优化**...

Global site tag (gtag.js) - Google Analytics