`

MySQL搜索引擎总结

阅读更多

转载:http://mp.weixin.qq.com/s?__biz=MzA5Mjg2NTQxOA==&mid=2650420350&idx=1&sn=61673a528ec43bbd84e53b35a54b1ae8&chksm=8868029bbf1f8b8d7c330c05ce2e671b769a03189de41d7c629bcf28dadf2d5e135c3c883c94&mpshare=1&scene=1&srcid=03220h54UTF98MdH0f4xN1UG#rd

 

什么是存储引擎?

关系数据库表是用于存储和组织信息的数据结构,可以将表理解为由行和列组成的表格,类似于Excel的电子表格的形式。有的表简单,有的表复杂,有的表根本不用来存储任何长期的数据,有的表读取时非常快,但是插入数据时去很差;而我们在实际开发过程中,就可能需要各种各样的表,不同的表,就意味着存储不同类型的数据,数据的处理上也会存在着差异,那么。对于MySQL来说,它提供了很多种类型的存储引擎,我们可以根据对数据处理的需求,选择不同的存储引擎,从而最大限度的利用MySQL强大的功能。这篇博文将总结和分析各个引擎的特点,以及适用场合,并不会纠结于更深层次的东西。我的学习方法是先学会用,懂得怎么用,再去知道到底是如何能用的。下面就对MySQL支持的存储引擎进行简单的介绍。

MyISAM

MyISAM表是独立于操作系统的,这说明可以轻松地将其从Windows服务器移植到Linux服务器;每当我们建立一个MyISAM引擎的表时,就会在本地磁盘上建立三个文件,文件名就是表明。例如,我建立了一个MyISAM引擎的tb_Demo表,那么就会生成以下三个文件:

1.tb_demo.frm,存储表定义;
2.tb_demo.MYD,存储数据;
3.tb_demo.MYI,存储索引。

MyISAM表无法处理事务,这就意味着有事务处理需求的表,不能使用MyISAM存储引擎。MyISAM存储引擎特别适合在以下几种情况下使用:

1.选择密集型的表。MyISAM存储引擎在筛选大量数据时非常迅速,这是它最突出的优点。
2.插入密集型的表。MyISAM的并发插入特性允许同时选择和插入数据。例如:MyISAM存储引擎很适合管理邮件或Web服务器日志数据。

InnoDB

InnoDB是一个健壮的事务型存储引擎,这种存储引擎已经被很多互联网公司使用,为用户操作非常大的数据存储提供了一个强大的解决方案。我的电脑上安装的MySQL 5.6.13版,InnoDB就是作为默认的存储引擎。InnoDB还引入了行级锁定和外键约束,在以下场合下,使用InnoDB是最理想的选择:

1.更新密集的表。InnoDB存储引擎特别适合处理多重并发的更新请求。
2.事务。InnoDB存储引擎是支持事务的标准MySQL存储引擎。
3.自动灾难恢复。与其它存储引擎不同,InnoDB表能够自动从灾难中恢复。
4.外键约束。MySQL支持外键的存储引擎只有InnoDB。
5.支持自动增加列AUTO_INCREMENT属性。

一般来说,如果需要事务支持,并且有较高的并发读取频率,InnoDB是不错的选择。

MEMORY

使用MySQL Memory存储引擎的出发点是速度。为得到最快的响应时间,采用的逻辑存储介质是系统内存。虽然在内存中存储表数据确实会提供很高的性能,但当mysqld守护进程崩溃时,所有的Memory数据都会丢失。获得速度的同时也带来了一些缺陷。它要求存储在Memory数据表里的数据使用的是长度不变的格式,这意味着不能使用BLOB和TEXT这样的长度可变的数据类型,VARCHAR是一种长度可变的类型,但因为它在MySQL内部当做长度固定不变的CHAR类型,所以可以使用。

一般在以下几种情况下使用Memory存储引擎:

1.目标数据较小,而且被非常频繁地访问。在内存中存放数据,所以会造成内存的使用,可以通过参数max_heap_table_size控制Memory表的大小,设置此参数,就可以限制Memory表的最大大小。

2.如果数据是临时的,而且要求必须立即可用,那么就可以存放在内存表中。

3.存储在Memory表中的数据如果突然丢失,不会对应用服务产生实质的负面影响。

Memory同时支持散列索引和B树索引。B树索引的优于散列索引的是,可以使用部分查询和通配查询,也可以使用<、>和>=等操作符方便数据挖掘。散列索引进行“相等比较”非常快,但是对“范围比较”的速度就慢多了,因此散列索引值适合使用在=和<>的操作符中,不适合在<或>操作符中,也同样不适合用在order by子句中。

可以在表创建时利用USING子句指定要使用的版本。例如:

create table users
(
    id smallint unsigned not null auto_increment,
    username varchar(15) not null,
    pwd varchar(15) not null,
    index using hash (username),
    primary key (id)
)engine=memory;

  上述代码创建了一个表,在username字段上使用了HASH散列索引。下面的代码就创建一个表,使用BTREE索引。

create table users
(
    id smallint unsigned not null auto_increment,
    username varchar(15) not null,
    pwd varchar(15) not null,
    index using btree (username),
    primary key (id)
)engine=memory;

MERGE

MERGE存储引擎是一组MyISAM表的组合,这些MyISAM表结构必须完全相同,尽管其使用不如其它引擎突出,但是在某些情况下非常有用。说白了,Merge表就是几个相同MyISAM表的聚合器;Merge表中并没有数据,对Merge类型的表可以进行查询、更新、删除操作,这些操作实际上是对内部的MyISAM表进行操作。Merge存储引擎的使用场景。

对于服务器日志这种信息,一般常用的存储策略是将数据分成很多表,每个名称与特定的时间端相关。例如:可以用12个相同的表来存储服务器日志数据,每个表用对应各个月份的名字来命名。当有必要基于所有12个日志表的数据来生成报表,这意味着需要编写并更新多表查询,以反映这些表中的信息。与其编写这些可能出现错误的查询,不如将这些表合并起来使用一条查询,之后再删除Merge表,而不影响原来的数据,删除Merge表只是删除Merge表的定义,对内部的表没有任何影响。

ARCHIVE

Archive是归档的意思,在归档之后很多的高级功能就不再支持了,仅仅支持最基本的插入和查询两种功能。在MySQL 5.5版以前,Archive是不支持索引,但是在MySQL 5.5以后的版本中就开始支持索引了。Archive拥有很好的压缩机制,它使用zlib压缩库,在记录被请求时会实时压缩,所以它经常被用来当做仓库使用。

如何选择合适的存储引擎?
选择标准可以分为:
(1)是否需要支持事务;
(2)是否需要使用热备;
(3)崩溃恢复:能否接受崩溃;
(4)是否需要外键支持;

然后按照标准,选择对应的存储引擎即可。 

1
0
分享到:
评论

相关推荐

    MySQL存储引擎MyISAM与InnoDB区别总结整理

    在MySQL 5.1之前的版本中,默认的搜索引擎是MyISAM,从MySQL 5.5之后的版本中,默认的搜索引擎变更为InnoDB。 2、MyISAM与InnoDB存储引擎的主要特点 MyISAM存储引擎的特点是:表级锁、不支持事务和全文索引,适合...

    mysql基础只是总结

    通过cmd 输入netstat -a搜索3306端口是否处于listening状态 【mysql服务的启动与停止】 1、右击我的电脑-管理-服务与应用程序-服务-mysql 2、net stop mysql|net start mysql 【mysql的配置文件以及数据位置】 1...

    MySQL面试题大总结

    索引的数据结构和具体存储引擎的实现有关,mysql中使用较多的索引有hash索引,B+树索引,innodb的索引实现为B+树,memory存储引擎为hash索引。 B+树是一个平衡的多叉树,从根节点到每个叶子节点的高度差值不超过1,...

    mysql数据库my.cnf配置文件

    # MySQL会首先扫描一遍该缓冲,以避免磁盘搜索,提高查询速度,如果需要排序大量数据,可适当调高该值。但MySQL会为每个客户连接发放该缓冲空间,所以应尽量适当设置该值,以避免内存开销过大 sort_buffer_size = ...

    MySQL的索引.pptx

    MySql索引的精心总结-ppt-即下即用-免费下载

    百度地图开发java源码-ExceptionSearch:纯前后端分离的搜索引擎项目实战

    为啥本项目取名为搜索引擎呢,在长达一周,超过60个小时的编码过程里,时间主要耗费在搜索这块的业务实现,所以最终把他定为搜索引擎的项目。 两个重点: 搜索这一块我总结了一下两点为重点: 1、在庞大的数据量下,...

    movie-seeker:基于豆瓣电影数据的Lucene搜索引擎

    :clinking_beer_mugs:一、demo地址二、技术点总结python网络爬虫mysql(数据存储)lucene(全文搜索引擎)java WEB/JSPtomcat服务器docker(应用环境封装)nginx(反向代理)let’s encrypt(https证书)三、源码介绍目录树如...

    sql总结.doc

    (2)Mysql中搜索引擎Innodb(聚簇索引)和Mysiam(非聚簇索引)都采用B+,oracle也采用B+树实现 注:聚簇索引:一张表只能建立一个聚簇索引,以主键建立索引。聚簇索引包括主键索引和二级索引(二级索引是在对非主键...

    Veritas Storage Foundation

    最近有个项目要上SFW HA,正好借此机会学习了一下,特此总结一些个人认为至关重要的环节,提供给即将或者通过搜索引擎过来的朋友们。 环境说明:所有操作系统均为WINDOWS SERVER 2008企业版,且均加入了2008上所...

    飘扬医疗预约挂号系统高级运营版 FlyingMedicalAppointment.rar

    设置--&gt; 医生设置 疾病设置 媒体类型设置 医院科室设置 搜索引擎设置 我的资料--&gt; 修改我的资料 修改密码 选项设置 系统管理--&gt; 人员管理 权限管理 医院列表 通知管理 日志记录--&gt; 操作日志 登录错误记录 竞价...

    2021互联网大厂Java架构师面试题突击视频教程

    18_总结一下分布式搜索引擎相关问题的面试技巧 19_先平易近人的随口问你一句分布式缓存的第一个问题 20_来聊聊redis的线程模型吧?为啥单线程还能有很高的效率? 21_redis都有哪些数据类型?分别在哪些场景下使用...

    GTCMS好文本网站内容管理系统 v1.08.zip

    4、多项SEO优化设计,sitemap生成、搜索引擎提交、归档链接、网站导航地图、TAG标签等众多优化项目,配合前端模板优化效果极佳。 5、后台多用户设计,可以添加多位管理员,为不同管理角色分配不同权限。 6、多项...

    GTCMS好文本网站内容管理系统 v1.08

    GTCMS好文本网站内容管理系统GTCMS是由好文本网总结之前WEB开发经验,秉承简单、易用、...4、多项SEO优化设计,sitemap生成、搜索引擎提交、归档链接、网站导航地图、TAG标签等众多优化项目,配合前端模板优化效果极佳

    HICMS海松内容管理系统 v1.0.rar

    2.利于搜索引擎对网站的友好程度,提高搜索引擎对网站收录量;3.很大程度上提高了用户访问的效率。这样一来,一些地区门户、行业网站、甚至政府部门信息类网站都免去了因为大量数据访问速率下降的后顾之忧。 ...

    你还在手撸SQL?ChatGPT笑晕在厕所

    经典3表设计: 学生表 S(SNO,SNAME,AGE,SEX),其属性表示学生的学号、姓名、年龄和性别; 选课表 SC(SNO,CNO,GRADE),其属性表示学生...而且扎心的是,每步操作都有理有据有提示,这是要干掉搜索引擎的节奏?

    基于springboot+vue的游戏交易系统.zip

    SEO优化:前端页面采用服务端渲染(SSR),提高页面加载速度,有利于搜索引擎优化。总结:基于springboot+vue的游戏交易系统是一个功能完善、性能优越的全栈项目,适合作为学习和商业应用的基础。通过该系统,用户...

    php脚本资料电子书籍

    搜索引擎技术核心揭密(PHP) 谈php+mysql注射语句构造 通过对php一些服务器端特性的配置加强php的安全 学习phpnuke漏洞 用PHP函数解决SQL injection 在php中使用sockets从新闻组中获取文章 紫桐VBB2.28论坛漏洞利用...

    Linux常用命令汇总

    王牌搜索引擎Google采用的也是Linux服务器。值得一提的是, Oracle 和Informix 两家数据库厂商明确表示不支持Linux,这个决定给予了Mysql数据库充分的发展机会。同年10月,Intel和Netscape宣布小额投资红帽软 件,这...

Global site tag (gtag.js) - Google Analytics