MySQL
文章平均质量分 60
zhaiwx1987
淘宝,开发DBA,专注于MySQL性能优化及其他开源信息
展开
-
MySQL客户端访问配置(ZZ)
<br />写开题报告写的抑郁,忽然想起来昨天重装系统,俺还没重装可爱的mysql,懒得配置安装,直接网上搜了<br />一篇文章,主要讲mysql的客户端访问配置,如何从别的机子上来访问本机。<br />来源:http://forum.ubuntu.org.cn/viewtopic.php?p=157127<br /> <br />安装MySQL <br /><br />sudo apt-get install mysql-server <br /><br />这个应该很简单了,而且我觉得大家在安装方面也转载 2010-11-29 16:21:00 · 1244 阅读 · 0 评论 -
MySQL笔记(MySQL索引)
<br /><br />索引实现于存储引擎层,因此不具有统一的标准,其实现方式也可能不相同。<br />如果索引包多列数据,那么列的顺序很重要,因为MySQL只能高效的搜索索引的最左前缀(leftmost prefix)<br /> <br />B-Tree索引<br />为大部分存储引擎所支持<br />Ps:NDB Cluster存储引擎尽管把索引标记为BTREE,但其内部使用的却是T-TREE数据结构<br />许多存储引擎实际使用的B+树,它的每一个叶子节点都包含了指向下一个节点的联接,以实现快速的原创 2010-12-02 00:00:00 · 441 阅读 · 0 评论 -
MySQL笔记
<br /><br />R-Tree索引<br />MyISAM支持空间索引,可以使用于如GEOMETRY这样的地理空间数据类型(??困惑- -//?)<br /> <br />全文索引:<br />从文本中找到关键字,而不是直接和索引中的值进行比较。这似乎是个很强大的功能<br />先在这里mark一下,后面再分析。<br /> <br /> <br /> <br />类似下面的查询不能使用a上的索引<br />mysql > SELECT a from t where a+1 =5;<br />或者在w原创 2010-12-04 00:31:00 · 419 阅读 · 0 评论 -
MySQL笔记(聚集索引)
(目前为止比较困惑的一个部分,重点MARK下!)聚集索引(或称聚簇索引)是一种存储数据的方式,在Postgre和Oracle(被称为"index-organized table")均进行了实现。MySQL中仅有SolidDB和InnoDB支持聚集索引,并且在5.1之前还不支持选择列进行聚集。在InnoDB中指定了主键后,数据的存储顺序就是主键的顺序(默认聚集索引????)例如对于一个以整数字段作为主键的表,依次插入9,8,10,实验结果表明顺序会自动被调整为8,9,10(由此可见在Innodb中使用主键一定原创 2010-12-05 15:38:00 · 1053 阅读 · 0 评论 -
MySQL笔记(索引和表维护)
<br /> <br />索引和表维护<br />------<br />1.检查表:check table<br />修复损坏的表:repair table(并非所有的存储引擎都支持)<br />2.更新索引统计:Analyze table<br /> -主要用于查询优化器,优化器基于开销,而主要开销指标是查询会访问的记录数<br /> -MyISAM将统计信息保存在磁盘上。在进行统计时会锁住表 <br /> -InnoDB在第一次打开表的时候利用随机索引(??)进行估计,不够精确。在InnoDB<br原创 2010-12-07 22:34:00 · 794 阅读 · 0 评论 -
MySQL笔记(哈希索引)
<br /><br />hash索引<br />通过计算被索引列的哈希码,建立子哈系表的基础上,只对精确查询有用。<br />在MySQL中,只有Memory存储引擎支持显式的哈希索引<br />如<br />CREATE TABLE th(<br />l_name VARCHAR(50) NOT NULL,<br />f_name VARCHAR(50) NOT NULL,<br />KEY USING HASH(f_name)<br />) ENGINE=MEMORY;<br /> <br />1.哈希原创 2010-12-03 00:06:00 · 2339 阅读 · 0 评论 -
MySQL的联结(Join)语法(ZZ)
<br /><br />出处:http://www.blogjava.net/chenpengyi/archive/2005/10/17/15747.html<br /> <br />1.内联结、外联结、左联结、右联结的含义及区别:<br /> <br />在讲MySQL的Join语法前还是先回顾一下联结的语法,呵呵,其实连我自己都忘得差不多了,那就大家一起温习吧(如果内容有错误或有疑问,可以来信咨询:陈朋奕 chenpengyi#gmail.com),国内关于MySQL联结查询的资料十分少,相信大家在看了转载 2010-12-05 22:07:00 · 576 阅读 · 0 评论 -
MySQL笔记(覆盖索引)
<br /><br />覆盖索引:即包含查询所需要数据的索引,在某种情况下,对于查询,仅仅读取索引上的数据就已经足够了。一般情况下,在索引中查询的代价比。<br />在查询前面使用explain,可以通过输出的extra列来判断,对于一个索引覆盖查询,显示为using index,MySQL查询优化器在执行查询前会决定是否有索引覆盖查询。<br />以下两种情况将不会覆盖查询<br />1)没有一个覆盖查询的索引<br />2)执行like操作<br />当然,可以对索引进行延伸或重写查询,使用诸如join原创 2010-12-05 22:26:00 · 1094 阅读 · 0 评论 -
MySQL笔记(索引排序及压缩索引)
<br /><br />1.使用索引来进行order by<br />(mark!!!看的笔记困惑,书上着墨不多,以后分析代码时细看!!)<br />只有当索引的顺序和order by子句的顺序完全一致,并且所有列的排序方向一样才可以。当联接查询时,orderby的必须是第一个表。<br />排序查询的where和order by需要形成索引的最左前缀,即总是要包含索引的左边的列。<br />例如对于表a(i int,j int ,k int,t int),在i,j,k上建索引<br />如下:<br />原创 2010-12-06 22:31:00 · 2623 阅读 · 1 评论 -
MySQL笔记(高效的ALTER TABLE)
<br /><br />在使用alter table进行表修改时,可能会引起很大的消耗,比如会新建一个空表,并进行数据转储,再删除旧表,而当表很大或者有许多索引时,将需要更大的代价,<br />alter table可以使用ALTER COLUMN、MODIFY COLUMN、CHANGE COLUMN来修改列<br />ALTER COLUMN:用于指定列的新默认值,或删除旧的默认值。如果旧的默认值被删除同时列值为NULL,则新的默认值为NULL。如果列值不能为NULL,MySQL会指定一个默认值;<br原创 2010-12-09 23:14:00 · 2584 阅读 · 1 评论 -
MySQl的ON DUPLICATE KEY
<br /><br />今天偶然看到ON DUPLICATE KEY这么个奇怪的语句,翻阅手册实验了下<br />创建表:<br />create t1(a int,b int, c int ,primary key(a));<br />插入语句:<br />insert into t1 values(1,3,3) <br />1,3,3<br />再次<br />insert into t1 values(1,6,7) on duplicate key update c = c+4;<br />则变为<b原创 2010-12-08 23:12:00 · 2219 阅读 · 0 评论 -
MySQL笔记(查询优化)
查询性能优化基本原则:优化数据访问一些典型的错误包括:提取了超过需要的行、多表联接时提取所有列或提取所有的列(select * 可能会造成覆盖索引这样的优化手段失效)MySQL中,最简单的开销指标包括:1.执行时间2.检查的行数3.返回的行数---通过使用索引,在explain时可以减少处理的行数---使用覆盖索引来避免访问行重构查询1,使用分治法来处理查询,每次只执行查询的一小部分,以减少受影响的行数2,分解联接,将一个多表查询分解成多个单个查询,然后在应用程序端实现联接操作。查询过程:1.客户端发送查询原创 2010-12-12 22:22:00 · 726 阅读 · 0 评论 -
MySQL笔记(查询优化续1)
<br /><br /> <br />在MYSQL中,提供给优化器使用的统计数据是由存储引擎提供,例如表或索引的页面数量、键和行的长度等信息。<br /> <br />由优化器产生的执行计划是一个树形结构,用于指导执行引擎产生结果,其结构为一个左深度树.<br />如:<br /> join<br /> join tbl4<br /> join tbl3<br />tbl1 tbl2<br /> <br /> <br />MYSQL联接优化器是优化器原创 2010-12-16 00:45:00 · 504 阅读 · 0 评论 -
MYSQL笔记(控制优化器的行为)
<br /><br />如果不满意MYSQL提供的优化方案,可以使用一些查询提示来控制优化器的行为<br />1.HIGH_PRIORITY和LOW_PRIORITY<br />决定访问同一个表的语句相对与其他语句的优先级,根据这两个提示服务器对访问表的队列进行处理,在有表锁的存储过程中有效,但在有细粒度锁或者并发控制的存储引擎上无效<br />2.DELAYED<br />应用于INSERT和UPDATE,语句立刻返回并将待插入的列放入缓冲区,在表空闲时插入。<br />3.STRAIGHT_JOIN<b原创 2010-12-18 18:33:00 · 584 阅读 · 0 评论 -
MYSQL笔记(查询优化续2--查询优化限制5.1版本)
<br /><br /> <br />1.对子查询的优化可能会很糟糕,例如where 子句中的IN查询,优化器会将IN中的子查询与外表进行联系,可以使用联接或者用group_concat来手动生成IN中的列表<br />2.对union的限制,一些外部条件例如limit、order by等有时不会被“下推”到UNION的内部,例如,对两个表进行union,并进行limit,mysql会首先把这两个表都读入临时表,再进行limit。<br />3.索引合并优化,索引合并算法使查询可以使用表的多个索引,在MYS原创 2010-12-16 22:57:00 · 445 阅读 · 0 评论 -
ubuntu下安装MySQL
安装:相关文档:http://doc.mysql.cn/这里有一些中文在线文档地址:http://dev.mysql.com版本:mysql-5.1.51.tar.gz下载之后解压缩后:sudotar xzvf mysql-5.1.51.tar.gz -C /usr/local/src/将代码解压到/usr/local/src中其中- zxvf -z 是配合解压.GZ的 -x 解开一个包文件 -v 显示详细信息 -f 必须,表示使用归档文件cd/usr/local/src/mysql-5.1.51配原创 2010-10-27 16:16:00 · 531 阅读 · 0 评论 -
mysql 查看版本及配置信息
查看版本信息:bin/mysqladmin version查看配置信息:bin/mysqladmin variables显示数据库信息bin/mysqlshow显示某个数据库的表bin/mysqlshow zhaiwx(数据库名为zhaiwx)记录一下,防止忘了原创 2010-10-27 16:52:00 · 1686 阅读 · 0 评论 -
初学MySQL笔记之权限系统
<br />MySQL权限系统保证所有的用户只执行允许做的事情。当你连接MySQL服务器时,你的身份由你从那儿连接的主机和你指定的用户名来决定。<br />连接后发出请求后,系统根据你的身份和你想做什么来授予权限。这意味着不同的主机甚至可以使用同样的用户名来访问MySQL<br />默认主机名是localhost。 <br />默认用户名在Windows中是ODBC,在Unix中是你的Unix登录名。<br />MySQL存取控制包含2个阶段:<br />阶段1:服务器检查是否允许你连接。 <br />阶段原创 2010-10-31 00:02:00 · 564 阅读 · 0 评论 -
MYSQL笔记(查询优化续3,特定类型的优化建议)
<br /><br />count查询<br />对于MYISAM中的SQL:<br />SELECT count(*) from city WHERE id > 5;<br />改写为:<br />SELECT (SELECT COUNT(*) FROM city) - count(*) FROM city where id <=5<br />采用否定条件,在子查询中的count将会被MYISAM优化为一个常量<br />另外在优化count时可以采用覆盖索引或是外部缓存系统等等方法<br /> <br原创 2010-12-18 18:30:00 · 534 阅读 · 0 评论 -
MYSQL笔记(存储程序)
<br /><br /> <br />存储程序即将SQL语句存储在服务器上,客户端无需重新发布单独语句。<br />遵循的语法:SQL2003<br />前提:需要在MYSQL数据库中有proc表,该表在安装MYSQL过程中创建<br />权限:<br />1.创建存储子程序:CREATE ROUTINE权限<br />2.提醒或移除子程序:ALTER ROUTINE权限<br />3.执行子程序:EXECUTE权限<br />一个子程序与特定的数据库相联系,在存储子程序内USE语句是不允许的。<br />原创 2010-12-22 22:58:00 · 544 阅读 · 0 评论 -
MySQL之用户资源限制
膜拜一下,MySQL太强悍了。对用户资源限制可以通过对User表的修改来实现,保存在max_questions、max_updates、max_connections和max_user_connections列内。如果user表没有这些列,可以通过升级User表来实现(参考MySQLs手册)语句:使用GRANT语句设置资源限制,使WITH子句来命名每个要限制的资源和根据每小时记数的限制值如:以限制方式创建可以访问customer数据库的新账户mysql> GRANT ALL ON customer.* TO原创 2010-10-31 11:35:00 · 4155 阅读 · 0 评论 -
初学MySQL之查询缓存
<br />在MySQL服务器端,针对SELECT操作做了查询结果的缓存,缓存查询的文本以及发送的结果。对于一个不经常更新并且需要频繁SELECT的表而言,这样的特性非常有用,比如一些相对稳定的web动态页面。<br />需要注意以下几点:<br />1.查询缓存不返回旧的数据。当表更改后,查询缓存值的相关条目被清空。<br />2.如果有许多mysqld服务器更新相同的MyISAM(默认存储引擎)表,在这种情况下查询缓存不起作用。<br />3.查询缓存的SQL语句区分大小写<br />4.当一个表被更改原创 2010-11-01 10:47:00 · 536 阅读 · 0 评论 -
初学MySQL笔记(一)
查看数据库表的状态,能够容纳的数据最大长度等信息show table status查看版本号,当前日期SELECT VERSION(), CURRENT_DATE,NOW();查看用户USER()可以将MYSQL作为一个计算器来使用:SELECT SIN(PI()/4), (4+1)*5测试了几组事例,发现MYSQL对select后面的数据并没有明显的约束,可以是字符串、数字等,甚至字符串/数字(结果为0),都会给出一个表格形式的结果支持在一行输入多条语句,以;隔开即可,mysql接受自由格式的输入:它收集原创 2010-10-29 09:28:00 · 482 阅读 · 0 评论 -
执行MySQL文件脚本的三种方法
mysql支持从文件读取命令,这样就可以将多个命令存放在文件中,需要时,直接执行脚本就可以咯!实验:编辑文件a.txt,文件内容如下usezhaiwxinsertinto a values(1,1);insertinto a values(2,2);执行命令:sudomysql 再打开mysql发现a表中被插入了两条数据。除此之外,还有以下两种方式执行脚本mysql> source a.txt;或mysql> /. a.txt原创 2010-10-29 16:22:00 · 1275 阅读 · 0 评论 -
Mysql字符匹配
<br /><br />SQL标准的语句中使用like来进行字符匹配,在MySQL中支持扩展的正则表达式<br />example:mysql> SELECT * FROM pet WHERE name REGEXP '^b';mysql> SELECT * FROM pet WHERE name REGEXP BINARY '^b'; //区分大小写MySQL采用Henry Spencer的正则表达式实施,其目标是符合POSIX 1003.2原创 2010-10-29 21:11:00 · 566 阅读 · 0 评论 -
MYSQL笔记(MySQL查询缓存)
<br /><br /> 查询缓存保存了完整的SELECT结果集;这样当一个相同的查询到达时,可服务器可以跳过解析、优化、执行等阶段,直接把结果返回给客户端,但某种意义上讲,查询缓存实际上修改了应用程序请求的语义,例如,即使在LOCK TABLES的情况下,查询也能被缓存下来。<br /> 在服务器端维护了一个查找表,查找的键是查询文本、数据库和客户端协议版本及其他影响实际查询结果的因素,综合起来的哈希值,也就是说,只要客户端的查询语句有丝毫的差异,都不会命中缓存,或者查询语句相同,但不同原创 2010-12-21 22:58:00 · 764 阅读 · 0 评论 -
几种常用的存储引擎
<br /> MyISAM:默认的MySQL插件式存储引擎,它是在Web、数据仓储和其他应用环境下最常使用的存储引擎之一。注意,通过更改STORAGE_ENGINE配置变量,能够方便地更改MySQL服务器的默认存储引擎。<br />· InnoDB:用于事务处理应用程序,具有众多特性,包括ACID事务支持。<br />· BDB:可替代InnoDB的事务引擎,支持COMMIT、ROLLBACK和其他事务特性。<br />· Memory:将所有数据保存在RAM转载 2010-11-03 16:08:00 · 742 阅读 · 0 评论 -
近期的一些总结和安排
开题还在迷惘阶段,找完工作又得去lab写代码,终于恢复了以前的那种白天写代码,晚上看书的状态。总结一下10.28~11.3号做的一些事情。一部分是实验室事务,一部分是自学MySQL。刚开始接触MySQL,一边看手册, 在linux下进行了简单的安装和操作,MySQL有着极为丰富的特性,譬如说用户控制、查询缓存以及支持正则匹配等功能,以及多线程处理机制。MySQL支持使用主机和用户名来进行用户身份认证,在本机试验时,MySQL客户端和服务器Mysqld的交互使用Unix域套接字(未确认,仅从客户端连接服务器时原创 2010-11-03 22:37:00 · 513 阅读 · 0 评论 -
MySQL笔记(MYSQL准备语句)
MySQL支持准备语句,即在执行真正的查询前,将查询的模式先发送到服务器进行解析,将解析和优化的结果保存下来,在一些编程库中支持这种功能,通过准备语句可以很高校的在客户端和服务器端进行数据发送。准备语句中,将?作为参数,例如:INSERT INTO people(last_name,first_name) values(?,?);MYsql将把一个状态句柄发送给客户端,客户端根据状态句柄把每个问号对应的值发送到服务器执行查询,具体方式取决与编程语言准备语句具有以下优点:1.只需解析一原创 2010-12-25 19:59:00 · 614 阅读 · 0 评论 -
MySQL InnoDB vs PostgreSQL (转载)
<br />转载自:http://wangyuanzju.blog.163.com/blog/static/13029200799101140359/<br /> <br />多版本并发控制技术被很多数据库或存储引擎采用,如Oracle,MS SQL Server 2005+, PostgreSQL, Firebird, InnoDB, Falcon, PBXT, Maria等等。新的数据库存储引擎,几乎毫无例外的使用多版本而不是单版本加锁的方法实现并发控制,可以说多版本已经成为未来的发展趋势。<br />转载 2010-12-24 15:13:00 · 1777 阅读 · 0 评论 -
MySQL笔记(MYSQL触发器)
<br /><br /> <br />当执行delete、update或insert操作时,可以使用触发器来触发某些操作。<br /> <br />创建触发器:<br />CREATE TRIGGER trigger_name trigger_time trigger_event ON tbl_name <br /> <br />FOR EACH ROW trigger_stmt<br /> <br />其中 trigger_name是触发器名,<br />trigger_time:BEFORE,AFT原创 2010-12-25 14:56:00 · 15380 阅读 · 0 评论 -
MySQL游标
<br /><br />MySQL中的游标仅在存储过程中被支持,只读且不可滚动,使用光标可以迭代每一行结果,并把结果提取到变量中以做进一步处理。<br />游标是在临时表上进行操作的,其语法如下所示:<br /> <br />DECLARE cursor_name CURSOR FOR select_statement<br />这个语句声明一个光标。也可以在子程序中定义多个光标,但是一个块中的每一个光标必须有唯一的名字。<br />SELECT语句不能有INTO子句。<br /> <br />OPEN c原创 2010-12-25 16:21:00 · 1387 阅读 · 0 评论 -
MySQL锁概述(转载)
转载自:http://www.mysqlpub.com/forum.php?mod=viewthread&tid=5383&extra=page%3D101 MySQL锁概述02 MyISAM表锁03 InnoDB锁问题04 InnoDB行锁实现方式05 间隙锁(Next-Key锁)06 恢复和复制的需要,对InnoDB锁机制的影响07 InnoDB在不同隔离级别下的一致性读及锁的差异08 关于死锁转载 2010-12-27 13:42:00 · 1160 阅读 · 0 评论 -
MySQL事件(ZZ)
<br /><br />CREATE EVENT<br />CREATE EVENT [IF NOT EXISTS] event_name<br /> ON SCHEDULE schedule<br /> [ON COMPLETION [NOT] PRESERVE]<br /> [ENABLE | DISABLE]<br /> [COMMENT 'comment']<br /> DO sql_statement;<br />schedule:<br /> AT times转载 2010-12-25 15:11:00 · 1869 阅读 · 1 评论 -
Mysql5.5
<br />转载自:http://www.mysqlpub.com/forum.php?mod=redirect&tid=18137&goto=lastpost#lastpost<br />///////////////////////////////////////////////////////////<br />12月16日,甲骨文公司宣布,MySQL 5.5全面上市,这突出显示了甲骨文在兑现为MySQL用户提供创新的承诺。MySQL 5.5的功能得到了显著增强,使用户能跨Windows、Linux、转载 2010-12-27 11:20:00 · 510 阅读 · 0 评论 -
MySQL数据库存储引擎详解(ZZ)
MySQL数据库存储引擎详解 存储引擎是什么?MySQL中的数据用各种不同的技术存储在文件(或者内存)中。这些技术中的每一种技术都使用不同的存储机制、索引技巧、锁定水平并且最终提供广泛的不同的功能和能力。通过选择不同的技术,你能够获得额外的速度或者功能,从而改善你的应用的整体功能。例如,如果你在研究大量的临时数据,你也许需要使用内存存储引擎。内存存储引擎能够在内存中存储所有的表格数据。又或者,你也许需要一个支持事务处理的数据库(以确保事务处理不成功时数据的回退能力)。这些不同的技术以及配转载 2010-11-02 20:37:00 · 507 阅读 · 0 评论 -
MySQL表转换
<br />1.alter table<br />直接修改表的engine,mysql会逐行进行复制到新表,原表在这个过程中被锁定,并且其存储引擎特性可能丢失<br />2.dump/import<br />先将数据dump到文件中,再导入到新表中。<br />3.使用 Insert .....Select进行转存<br />如:<br />mysql > CREATE TABLE b LIKE a;<br />mysql > ALTER b ENGINE = InnoDB;<br />mysql > IN原创 2010-11-07 23:52:00 · 450 阅读 · 0 评论 -
MySQL源代码几个主要文件夹
MYSQL版本:5.1.54主要文件夹:1.BUILD:编译和安装脚本目录,大部分以compile开头的文件,包括不同处理器环境下的编译shell,例如compile-pentium64-debug:#! /bin/shpath=`dirname $0`set -- "$@" --with-debug=full. "$path/SETUP.sh"extra_flags="$pentium64_cflags $debug_cflags"extra_configs="$pentium_configs $debu原创 2010-12-29 20:24:00 · 1293 阅读 · 1 评论 -
MYSQL笔记(几个比较重要的类)
<br />1.THD<br />文件:Sql_class.h<br />该类的父类为Statement和Open_tables_state。THD类包含大量的成员变量,包括当前查询语句及解析树指针、线程信息、线程使用数据库表的情况记录、客户端信息、通信协议等内容。<br />2.Item类<br />文件:Item.h<br />Item是表达式的核心,用于实现表达式,Item类的实例应包括:<br />1).SQL语句中某项的类似物,如where、order等<br />2).值<br />3).数据类原创 2011-01-01 23:18:00 · 1091 阅读 · 0 评论 -
MySQL学习笔记(1)
<br />第一章 MySQL架构<br />客户连接及认证,在服务器拥有自己的线程,每个连接所属的查询都会在指定的某个单独线程中完成、<br />认证方式:基于用户名、原始主机信息和口令。<br />对查询请求,首先查询缓存,若不存在则对查询进行解析,创建解析树,对其进行优化(优化器)<br />----------优化器不关心存储引擎的差异,但存储引擎可能对查询优化过程产生影响。<br /><br />并发机制<br />1.共享锁/排他锁<br />2.锁粒度<br />MySQL锁策略由存储引擎来支原创 2010-11-06 23:48:00 · 499 阅读 · 0 评论