Linux1 MySQL的概述
MySQL是一个备受欢迎的高性能、多用户、多线程SQL数据库服务器,它是一个客户机/服务器结构的实现,由一个服务器守护程序MySQL和多种不同的客户程序及库组成。它由MySQL AB开发、发布和支持。MySQL AB是一家基于MySQL开发人员的商业公司,它是一家使用了一种成功的商业模式结合开源价值和方法论的第二代开源公司,MySQL是MySQL AB的注册商标。
MySQL服务器支持关键任务、重负载生产系统的使用,也可以将它嵌入到一个大配置(mass-deployed)的软件中去。用户可以从MySQL的“sql”了解关于MySQL和MySQL AB的最新信息。
1.MySQL的特点
根据MySQL的运行程序及开发环境来讲,MySQL具有如下特点:
● 多线程,MySQL的核心程序采用完全的多线程编程。线程是轻量级的进程,它可以灵活地为用户提供服务,而不过多的消耗系统资源。用多线程和C语言实现的MySQL能很容易充分利
用CPU,可以采用多CPU体系结构。
● 开放源代码,MySQL是自由的开放源代码产品,可以在GPL下畅通使用。
● 多操作系统支持,MySQL可运行在不同的操作系统下。简单地说,MySQL可以支持Windows95/98/NT/2000及UNIX、Linux和SUN OS等多种操作系统平台。这意味着在一个操作系统中实现的应用可以很方便地移植到其它的操作系统下。
● 性能高效稳定,MySQL拥有一个非常快速而且稳定的基于线程的内存分配系统,可以持续使用而不必担心其稳定性。事实上,MySQL的稳定性足以应付一个超大规模的数据库,因此Yahoo、Google、Cisco、HP和NASA都采用它作为自己的数据库引擎。
● 多用户支持,MySQL可有效地满足50~1000个并发用户的访问,并且在超过600个用户限度的情况下,MySQL的性能没有明显的下降。
● 应用程序支持,有C、C++,JAVA、Perl、PHP和Python等多种客户工具和API的支持。
● 支持事务处理、行锁定、子查询、外键和全文检索等功能。
● MySQL支持大型的数据库处理,可以方便地支持上万条记录的数据库。作为一个开放源代码的数据库,MySQL可以针对不同的应用进行相应的修改。
● MySQL有一个非常灵活而且安全的权限和口令系统。当客户与MySQL服务器连接时,他们之间所有的口令传送被加密,而且MySQL支持主机认证。
MySQL是数据库领域的中间派,它缺乏一个全功能数据库的大多数主要特征,但是又有比类似Xbase数据库记录存储引擎更多的特征。它类似于企业级RDBMS(relational database management system,关系型数据库管理系统)需要一个积极的服务者守护程序,但又不是非常消耗资源。
MySQL为程序员提供足够的功能。虽然系统缺乏主要数据库功能,但数据库程序员都非常喜欢其查询功能和广泛的客户库,发觉MySQL对简单数据库的价值。
2.MySQL与其它数据库的比较
MySQL是现在流行的关系型数据库中的一种,相比Oracle、DB2、SQL Server等大型数据库管理系统(DBMS)来说,MySQL具有小巧、查询迅捷等优点。MySQL主要目标是快速
、健壮和易用,而且它是免费的,可以在Internet上免费下载到,并可免费使用。MySQL对于一般中小型数据库管理系统,甚至大型应用都能够胜任。
而与同属开放源代码的PostgreSQL相比,MySQL也有它独特的特点。首先,MySQL的背后是一个成熟的商业公司,而PostgreSQL的背后是一个庞大的志愿开发组。这使得MySQL的开发过程更为慎重,而PostgreSQL的开发更为迅速。
MySQL的更新速度要比PostgreSQL快很多,而且因为它是商业软件的缘故,比PostgreSQL更流行。MySQL使用线程,而PostgreSQL使用的是进程,在不同线程之间的环境转换和访问公用的存储区域显然比在不同的进程之间要快得多,并且MySQL在权限系统上比PostgreSQL在某些方面更为完善。PostgreSQL只支持对于每一个用户在一个数据库上或一个数据表上的INSERT、SELECT和UPDATE/DELETE的授权,而MySQL允许你定义一整套的不同的数据级、表级和列级的权限甚至基于主机的权限。对于列级的权限,PostgreSQL可以通过建立视图,并确定视图的权限来弥补。MySQL却不支持视图,不过目前MySQL5.0已经支持存储过程和触发器,目的就是要追求处理的高速度。
3.MySQL在网络中的应用
与其它的大型数据库(例如Oracle、DB2、SQL Server等)相比,MySQL存在自身的不足,如规模小、功能有限(MySQL Cluster的功能和效率都相对比较差)等,但这不会减少它受欢迎的程度。因为,对于一般的个人使用者和中小型企业来说,MySQL提供的功能已经绰绰有余,而且由于MySQL是开放源码软件,因此可以大大降低总体拥有成本。
目前Internet上流行的网站构架方式是LAMP(Linux+Apache+MySQL+PHP),即使用Linux作为操作系统,Apache作为Web服务器,MySQL作为数据库,PHP作为服务器端脚本解释器。由于这4个软件都是自由或开放源码软件(FLOSS),因此使用这种方式不用花一分钱就可以建立起一个稳定、免费的网站系统。
4.MySQL管理
可以使用命令行工具管理MySQL数据库(命令mysql和mysqladmin),也可以从MySQL的网站下载图形管理工具MySQL Administrator和MySQL Query Browser对MySQL数据库进行管理。
● phpMyAdmin 是由php写成的MySQL资料库系统管理程式,让管理者可用Web界面管理MySQL资料库。
● phpMyBackupPro 也是由PHP写成的,可以透过Web介面创建和管理数据库。它可以创建伪cronjobs,可以用来自动在某个时间或周期备份MySQL数据库。
另外,还有其他的GUI管理工具,例如早先的mysql-front以及ems mysql manager,navicat 等等。
5.MySQL存储引擎
MySQL中的数据用各种不同的技术存储在文件(或者内存)中。这些技术中的每一种技术都使用不同的存储机制、索引技巧、锁定水平并最终提供广泛且不同的功能和能力。另外,通过选择不同的技术,你能够获得额外的速度或者功能,从而改善你的应用的整体功能。通常分为以下几种存储机制:
● MyISAM Mysql的默认数据库,最为常用。拥有较高的插入,查询速度,但不支持事务。
● InnoDB 事务型数据库的首选引擎,支持ACID事务,支持行级锁定。
● BDB 源自Berkeley DB,事务型数据库的另一种选择,支持COMMIT和ROLLBACK等其他事务特性。
● Memory 所有数据置于内存的存储引擎,拥有极高的插入,更新和查询效率。但是会占用和数据量成正比的内存空间。并且其内容会在Mysql重新启动时丢失。
● Merge 将一定数量的MyISAM表结合成为一个整体,在超大规模数据存储时很有用。
● Archive 非常适合存储大量的独立的,作为历史记录的数据。因为它们不经常被读取。Archive拥有高效的插入速度,但其对查询的支持相对较差。
● Federated 将不同的MySQL服务器联合起来,逻辑上组成一个完整的数据库。非常适合分布式应用。
● Cluster/NDB 高冗余的存储引擎,用多台数据机器联合提供服务以提高整体性能和安全性。适合数据量大,安全和性能要求高的应用。
● CSV 逻辑上由逗号分割数据的存储引擎。
● BlackHole 黑洞引擎,写入的任何数据都会消失,一般用于记录binlog做复制的中继。
另外,MySQL的存储引擎接口定义良好。有兴趣的开发者通过阅读文档编写自己的存储引擎。
6.MySQL的索引文件介绍
索引是一种特殊的文件(InnoDB数据表上的索引是表空间的一个组成部分),它们包含着对数据表里所有记录的引用指针。索引不是万能的,可以加快数据检索操作,但会使数据修改操作变慢。每修改数据记录,索引就必须刷新一次。为了在某种程序上弥补这一缺陷,许多SQL命令都有一个DELAY_KEY_WRITE项。这个选项的作用是暂时制止MySQL在该命令每插入一条新记录和每修改一条现有之后立刻对索引进行刷新,对索引的刷新将等到全部记录插入/修改完毕之后再进行。在需要把许多新记录插入某个数据表的场合,DELAY_KEY_WRITE选项的作用将非常明显。另外,索引还会在硬盘上占用相当大的空间。因此应该只为最经常查询和最经常排序的数据列建立索引。注意,如果某个数据列包含许多重复的内容,为它建立索引就没有太大的实际效果。
mysql视图和存储过程
从理论上讲,完全可以为数据表里的每个字段分别建一个索引,但MySQL把同一个数据表里的索引总数限制为16个。
● InnoDB数据表的索引
与InnoDB数据表相比,在InnoDB数据表上,索引对InnoDB数据表的重要性要在得多。在InnoDB数据表上,索引不仅会在搜索数据记录时发挥作用,还是数据行级锁定机制的苊、基础。“数据行级锁定”的意思是指在事务操作的执行过程中锁定正在被处理的个别记录,不让其他用户进行访问。这种锁定将影响到(但不限于)SELECT、LOCKINSHAREMODE、SELECT、FORUPDATE命令以及INSERT、UPDATE和DELETE命令。出于效率方面的考虑,InnoDB数据表的数据行级锁定实际 发生在它们的索引上,而不是数据表自身上。显然,数据行级锁定机制只有在有关的数据表有一个合适的索引可供锁定的时候才能发挥效力。
● 限制
如果WEHERE子句的查询条件里有不等号(WHEREcoloum!=),MySQL将无法使用索引。
类似地,如果WHERE子句的查询条件里使用了函数(WHEREDAY(column)=),MySQL也将无法使用索引。在JOIN操作中(需要从多个数据表提取数据时),MySQL只有在主键和外键的数据类型相同时才能使用索引。
如果WHERE子句的查询条件里使用比较操作符LIKE和REGEXP,MySQL只有在搜索模板的第一个字符不是通配符的情况下才能使用索引。比如说,如果查询条件是LIKE'abc%‘,MySQL将使用索引;如果查询条件是LIKE'%abc’,MySQL将不使用索引。
在ORDERBY操作中,MySQL只有在排序条件不是一个查询条件表达式的情况下才使用索引。(虽然如此,在涉及多个数据表查询里,即使有索引可用,那些索引在加快ORDERBY方面也没什么作用)。如果某个数据列里包含许多重复的值,就算为它建立了索引也不会有很好的效果。比如说,如果某个数据列里包含的净是些诸如“0/1”或“Y/N”等值,就没有必要为它创建一个索引。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论