??xml version="1.0" encoding="utf-8" standalone="yes"?>伊人色综合久久天天人守人婷
,久久综合给久久狠狠97色,一本综合久久国产二区 http://www.shnenglu.com/wolf/category/6279.htmlzh-cn Tue, 05 Feb 2013 00:44:11 GMT Tue, 05 Feb 2013 00:44:11 GMT 60 数据库事务的属性-ACID http://www.shnenglu.com/wolf/articles/121626.html老狼 老狼 Fri, 30 Jul 2010 07:53:00 GMT http://www.shnenglu.com/wolf/articles/121626.html http://www.shnenglu.com/wolf/comments/121626.html http://www.shnenglu.com/wolf/articles/121626.html#Feedback 1 http://www.shnenglu.com/wolf/comments/commentRss/121626.html http://www.shnenglu.com/wolf/services/trackbacks/121626.html 1 、数据库事务的属性- ACID Q四个英文单词的首写字母Q:(x)
1 Q原子性( Atomicity Q?/span>
所谓原子性就是将一l操作作Z个操作单元,是原子操作,卌么全部执行,要么全部不执行?/span>
2 Q一致性( Consistency Q?/span>
事务的一致性指的是在一个事务执行之前和执行之后数据库都必须处于一致性状态?/span> 如果事务成功地完成,那么pȝ中所有变化将正确地应用,pȝ处于有效状态。如果在事务中出现错误,那么pȝ中的所有变化将自动地回滚,pȝq回到原始状态?/span>
3 Q隔L( Isolation Q?/span>
隔离性指q发的事务是怺隔离的。即一个事务内部的操作?qing)正在操作的数据必须锁hQ不被其它企图进行修改的事务看到?/span>
4 Q持久性( Durability Q?/span>
持久性是指一个事务一旦被提交Q它Ҏ(gu)据库中数据的改变是怹性的Q接下来的其他操作和数据库故障不应该对其有Q何媄(jing)?/span> 。即一旦一个事务提交, DBMS Q?/span> Database Management System Q?/span> 保证它对数据库中数据的改变应该是怹性的Q持久性通过数据库备份和恢复来保证?/span>
2 、在关系型数据库中,事务的隔L分为四个隔ȝ别,在解读这四个U别前先介绍几个关于L据的概念?/span>
1 Q?/span>脏读Q?/span>Dirty Reads Q:(x)所谓脏d是对脏数据( Drity Data Q的dQ而脏数据所指的是未提交的数据。也是_(d)一个事务正在对一条记录做修改Q在q个事务完成q提交之前,q条数据是处于待定状态的Q可能提交也可能回滚Q,q时Q第二个事务来读取这条没有提交的数据Qƈ据此做进一步的处理Q就?x)生未提交的数据依赖关pR这U现象被UCؓ(f)脏读?/span>
2 Q不可重复读Q?/span>Non-Repeatable Reads Q:(x) 一个事务先后读取同一条记录,但两ơ读取的数据不同Q我们称之ؓ(f)不可重复?/span>。也是_(d)q个事务在两ơ读取之间该数据被其它事务所修改?/span>
3 Q读( Phantom Reads Q:(x)一个事务按相同的查询条仉新读取以前检索过的数据,却发现其他事务插入了(jin)满其查询条件的新数据,q种现象q为诅R?/span>
3 、事务四个隔ȝ别对比:(x)
1 Q未提交读( Read Uncommitted Q:(x) SELECT 语句以非锁定方式被执行,所以有可能d脏数据,隔离U别最低?/span>
2 Q提交读Q?/span> Read Committed Q:(x)只能d到已l提交的数据?/span> 卌决了(jin)脏读Q但未解决不可重复读?/span>
3 Q可重复读( Repeated Read Q:(x)在同一个事务内的查询都是事务开始时M致的Q?/span> InnoDB 的默认别。在 SQL 标准中,该隔ȝ别消除了(jin)不可重复读,但是q存在?/span> ?/span>
4 Q串行读Q?/span> Serializable Q:(x)完全的串行化读, 所?/span>SELECT 语句都被隐式的{换成 SELECT ... LOCK IN SHARE MODE Q即 d使用表׃n锁,d怺都会(x)d 。隔ȝ别最高?/span>
隔离U别Ҏ(gu)表:(x)
4 、事务隔ȝ别的讄Q?/span>
1 Q服务启动选项 --transaction-isolation
或在配置文g中设|:(x)
[mysqld]
transaction-isolation = {READ-UNCOMMITTED | READ-COMMITTED
| REPEATABLE-READ | SERIALIZABLE}
2 Q服务启动后的设|:(x)
SET [GLOBAL | SESSION ] TRANSACTION ISOLATION LEVEL
{ READ UNCOMMITTED | READ COMMITTED | REPEATABLE READ | SERIALIZABLE }
]]>MYSQL存储q程技术ȝ?/title> http://www.shnenglu.com/wolf/articles/83054.html老狼 老狼 Fri, 15 May 2009 07:44:00 GMT http://www.shnenglu.com/wolf/articles/83054.html http://www.shnenglu.com/wolf/comments/83054.html http://www.shnenglu.com/wolf/articles/83054.html#Feedback 10 http://www.shnenglu.com/wolf/comments/commentRss/83054.html http://www.shnenglu.com/wolf/services/trackbacks/83054.html 1.存储q程的概?br>2.Z么用存储过E?br>3.基本创徏、删除语?br>4.存储q程中的变量 5.BEGIN...END复合语句 6.程控制l构语句 7.注释语法 8.使用权限 9.条g和异常处理程?br>10.游标MYSQL存储q程技术ȝ下蝲
]]> MySQL数据库的备䆾 http://www.shnenglu.com/wolf/articles/77731.html老狼 老狼 Tue, 24 Mar 2009 07:39:00 GMT http://www.shnenglu.com/wolf/articles/77731.html http://www.shnenglu.com/wolf/comments/77731.html http://www.shnenglu.com/wolf/articles/77731.html#Feedback 0 http://www.shnenglu.com/wolf/comments/commentRss/77731.html http://www.shnenglu.com/wolf/services/trackbacks/77731.html 1.冷备?br>在数据库处于非运行状态时通过直接拯数据文g或目录的方式q行备䆾?br>2.热备?br>1).数据库讄为只ȝ? mysql>flush tables with read lock; 该语句的作用是:(x)h~冲区,对于所有带d锁定的数据库Q关闭所有打开的表Qƈ锁定所有的表,直到执行UNLOCK TABLES为止?br>注意Q在备䆾完成之前当前?x)话的连接不可退出,否则自动解锁?br>2).使用mysqldump导出或直接拷贝数据文件?br>mysqldump [options] [db_name [tbl_name ...]] 最单的导出是Q?br>shell>mysqldump db_name > db_back.sql 常用选项有:(x) --quick: 该选项对导出大表非常有用。如果不带该选项Qmysqldump在导出l果前装载整个结果集到内存中Q对于正在导Z个大的数据库Q这可能是一个问题。用该选项后,它将mysqldump从服务器以一ơ一行的方式(g)索而不做缓Ԍ直接输出?br>--disable-keysQ告?mysqldump ?Insert 语句的开头和l尾增加 /*!40000 Alter TABLE table DISABLE KEYS */; ?/*!40000 Alter TABLE table ENABLE KEYS */; 语句Q这能大大提高插入语句的速度Q因为它是在插入完所有数据后才重建烦(ch)引的。该选项只适合 MyISAM 表?br>--add-drop-tableQ在每个create语句之前增加一个drop table语句?br>--add-locksQ在每个表导Z前增加LOCK TABLESq且之后UNLOCK TABLE(Z(jin)使得更快地插入到MySQL)?br>--extended-insertQ用可以包括多个values列表的多行INSERT语法(可以加快插入速度)?br>--lock-tablesQ在导出前先锁定所有表。如果是MyISAM表,通过READ LOCAL的Ş式被锁定以支持ƈ发插入,对InnoDB和BDBcd表不?x)有效果?br>--optQ等同于--quick --add-drop-table --add-locks --extended-insert --lock-tables --quick?-opt选项默认打开Q可以通过--skip-opt选项来关闭?br>更多选项请参考手册?/p>
3).取消数据库的只读状态:(x) mysql>unlock tables;
]]>MYSQL外键(Foreign Key)的?/title> http://www.shnenglu.com/wolf/articles/69089.html老狼 老狼 Wed, 10 Dec 2008 10:06:00 GMT http://www.shnenglu.com/wolf/articles/69089.html http://www.shnenglu.com/wolf/comments/69089.html http://www.shnenglu.com/wolf/articles/69089.html#Feedback 29 http://www.shnenglu.com/wolf/comments/commentRss/69089.html http://www.shnenglu.com/wolf/services/trackbacks/69089.html 在MySQL 3.23.44版本后,InnoDB引擎cd的表支持?jin)外键约束?br>外键的用条Ӟ(x) 1.两个表必LInnoDB表,MyISAM表暂时不支持外键Q据说以后的版本有可能支持,但至目前不支持Q; 2.外键列必d立了(jin)索引QMySQL 4.1.2以后的版本在建立外键时会(x)自动创徏索引Q但如果在较早的版本则需要显C徏立; 3.外键关系的两个表的列必须是数据类型相|也就是可以相互{换类型的列,比如int和tinyint可以Q而int和char则不可以Q?
外键的好处:(x)可以使得两张表关联,保证数据的一致性和实现一些联操作;
外键的定义语法:(x) [CONSTRAINT symbol] FOREIGN KEY [id] (index_col_name, ...) REFERENCES tbl_name (index_col_name, ...) [ON DELETE {RESTRICT | CASCADE | SET NULL | NO ACTION | SET DEFAULT}] [ON UPDATE {RESTRICT | CASCADE | SET NULL | NO ACTION | SET DEFAULT}] 该语法可以在 CREATE TABLE ?ALTER TABLE 时用,如果不指定CONSTRAINT symbolQMYSQL?x)自动生成一个名字?br>ON DELETE、ON UPDATE表示事g触发限制Q可讑֏敎ͼ(x) RESTRICTQ限制外表中的外键改动)(j) CASCADEQ跟随外键改动)(j) SET NULLQ设I|(j) SET DEFAULTQ设默认|(j) NO ACTIONQ无动作Q默认的Q?/p>
搞个例子Q简单演CZ下用,做dage和xiaodi两个表,大哥表是主键Q小弟表是外键:(x) Q?br>
1 CREATE TABLE `dage` ( 2 `id` int ( 11 ) NOT NULL auto_increment, 3 `name` varchar ( 32 ) default '' , 4 PRIMARY KEY (`id`) 5 ) ENGINE= InnoDB DEFAULT CHARSET = latin1Q?br> 6 7 CREATE TABLE `xiaodi` ( 8 `id` int ( 11 ) NOT NULL auto_increment, 9 `dage_id` int ( 11 ) default NULL , 10 `name` varchar ( 32 ) default '' , 11 PRIMARY KEY (`id`), 12 KEY `dage_id` (`dage_id`), 13 CONSTRAINT `xiaodi_ibfk_1` FOREIGN KEY (`dage_id`) REFERENCES `dage` (`id`) 14 ) ENGINE= InnoDB DEFAULT CHARSET = latin1Q?/span>
插入个大哥:(x)
1 mysql > insert into dage(name) values ( ' 铜锣?/span>' ); 2 Query OK, 1 row affected ( 0.01 sec) 3 mysql> select * from dage; 4 + -- --+--------+ 5 | id | name | 6 + -- --+--------+ 7 | 1 | 铜锣?nbsp; | 8 + -- --+--------+ 9 1 row in set ( 0.00 sec)
插入个小弟:(x)
1 mysql > insert into xiaodi(dage_id,name) values ( 1 , ' 铜锣湾_弟A ' ); 2 Query OK, 1 row affected ( 0.02 sec) 3 4 mysql> select * from xiaodi; 5 + -- --+---------+--------------+ 6 | id | dage_id | name | 7 + -- --+---------+--------------+ 8 | 1 | 1 | 铜锣湾_弟A | 9 + -- --+---------+--------------+
把大哥删除:(x)
1 mysql > delete from dage where id = 1 ; 2 ERROR 1451 ( 23000 ): Cannot delete or update a parent row: a foreign key constraint fails (`bstar / xiaodi`, CONSTRAINT `xiaodi_ibfk_1` FOREIGN KEY (`dage_id`) REFERENCES `dage` (`id`))
提示Q不行呀Q有U束的,大哥下面q有弟Q可不能扔下我们不管呀Q?/p>
插入一个新的小弟:(x)
1 mysql > insert into xiaodi(dage_id,name) values ( 2 , ' _弟A ' ); 2 ERROR 1452 ( 23000 ): Cannot add or update a child row: a foreign key constraint fails (`bstar / xiaodi`, CONSTRAINT `xiaodi_ibfk_1` FOREIGN KEY (`dage_id`) REFERENCES `dage` (`id`)) 3
提示Q小子,想造反呀Q你q没大哥呢!
把外键约束增加事件触发限Ӟ(x)
1 mysql > show create table xiaodi; 2 3 CONSTRAINT `xiaodi_ibfk_1` FOREIGN KEY (`dage_id`) REFERENCES `dage` (`id`) 4 5 mysql> alter table xiaodi drop foreign key xiaodi_ibfk_1; 6 Query OK, 1 row affected ( 0.04 sec) 7 Records: 1 Duplicates: 0 Warnings: 8 mysql> alter table xiaodi add foreign key (dage_id) references dage(id) on delete cascade on update cascade ; 9 Query OK, 1 row affected ( 0.04 sec) 10 Records: 1 Duplicates: 0 Warnings: 0
再次试着把大哥删?jin)?x)
1 mysql > delete from dage where id = 1 ; 2 Query OK, 1 row affected ( 0.01 sec) 3 4 mysql> select * from dage; 5 Empty set ( 0.01 sec) 6 7 mysql> select * from xiaodi; 8 Empty set ( 0.00 sec)
得,q回对应的小弟也没了(jin)Q没办法Q谁让你跟我on delete cascade?jin)呢Q?/p>
例子说明的应该蛮清楚?jin)吧Q其他功能对应手册自己实践吧Q?-)
]]> MYSQL日志文g http://www.shnenglu.com/wolf/articles/67224.html老狼 老狼 Tue, 18 Nov 2008 09:28:00 GMT http://www.shnenglu.com/wolf/articles/67224.html http://www.shnenglu.com/wolf/comments/67224.html http://www.shnenglu.com/wolf/articles/67224.html#Feedback 2 http://www.shnenglu.com/wolf/comments/commentRss/67224.html http://www.shnenglu.com/wolf/services/trackbacks/67224.html MYSQL有不同类型的日志文g(各自存储?jin)不同类型的日?Q从它们当中可以查询到MYSQL里都做了(jin)些什么,对于MYSQL的管理工作,q些日志文g是不可缺的?br>1.错误日志(The error log)Q记录了(jin)数据库启动、运行以?qing)停止过E中错误信息Q?br>2.ISAM操作日志(The isam log)Q记录了(jin)所有对ISAM表的修改Q该日志仅仅用于调试ISAM模式Q?br>3.SQL执行日志(The query log)Q记录了(jin)客户端的q接以及(qing)所执行的SQL语句Q?br>4.更新日志(The update log)Q记录了(jin)改变数据的语句,已经不徏议用,׃q制日志替代Q?br>5.二进制日?The binary log)Q记录了(jin)所有对数据库数据的修改语句Q?br>6.时日志(The slow log)Q记录所有执行时间超q最大SQL执行旉(long_query_time)或未使用索引的语句;
如果你是在用mysql的复制、备份功能,那么从服务器q提供了(jin)一U叫做relay log的日志文件?/p>
默认情况下所有日志文件会(x)记录在MYSQL的数据目录下Q你可以通过强制mysqld闭ƈ重新打开一个文件进行日志记录,当然pȝ?x)自动加后缀(?00001, .00002)Q方式有在mysql环境下执行语?mysql>flush logs; 或者通过mysqladmin理E序执行 #mysqladmin flush-logs ?#mysqladmin refresh
q些日志的启动方式可以在mysqld_safe方式启动数据库的时候,后面跟选项参数Q也可以在配|文仉配置Q推荐采用第二种方式Q配|方法很单,我只配置?jin)三U日志:(x) [mysqld] log=/var/log/mysqld_common.log log-error=/var/log/mysqld_err.log log-bin=/var/log/mysqld_bin.bin
日志的查看很单,大部分都是文本,直接用vim、less、more之类的工L(fng)可以了(jin)Q值得说明的是二进制文件的查看Q?/p>
1). 首先定是否开启了(jin)二进制文件记录功?br>mysql>show variables like 'log_bin';
2). 如果你想知道现在记录二进制数据的文g具体信息Q你可以通过下列语句看到现在正在记录哪个文gQ以?qing)记录的当前位置Q?br>mysql>show master status;
3). 查看二进制数据需要借助E序mysqlbinlogQ看看它支持哪些选项Q根据自己需要来使用?br>mysql>mysqlbinlog /var/log/mysql/mysql-bin.000040; 查询某个旉范围的可以执行下列语句,如果记录很多可以结果定向到一个文仉自己慢慢?-) Q?br>mysql>mysqlbinlog --start-datetime='2008-01-01 00:00:00' --stop-datetime='2008-08-08 00:00:00' /var/log/mysql/mysql-bin.000040 > ./tmp.log
]]> MYSQL EXPLAIN句法(得到关于SELECT的信? http://www.shnenglu.com/wolf/articles/43467.html老狼 老狼 Fri, 29 Feb 2008 06:43:00 GMT http://www.shnenglu.com/wolf/articles/43467.html http://www.shnenglu.com/wolf/comments/43467.html http://www.shnenglu.com/wolf/articles/43467.html#Feedback 0 http://www.shnenglu.com/wolf/comments/commentRss/43467.html http://www.shnenglu.com/wolf/services/trackbacks/43467.html EXPLAIN tbl_name or EXPLAIN SELECT select_options EXPLAIN tbl_name是DESCRIBE tbl_name或SHOW COLUMNS FROM tbl_name的一个同义词? 当你在一条SELECT语句前放上关键词EXPLAINQMySQL解释它将如何处理SELECTQ提供有兌如何联结和以什么次序联l的信息? 借助于EXPLAINQ你可以知道你什么时候必Mؓ(f)表加入烦(ch)引以得到一个用烦(ch)引找到记录的更快的SELECT。你也能知道优化器是否以一个最x序联l表。ؓ(f)?jin)强制优化器对一个SELECT语句使用一个特定联l次序,增加一个STRAIGHT_JOIN子句? 对于非简单的联结QEXPLAIN为用于SELECT语句中的每个表返回一行信息。表以他们将被读入的序被列出。MySQL用一Ҏ(gu)描多ơ联l的方式解决所有联l,q意味着MySQL从第一个表中读一行,然后扑ֈ在第二个表中的一个匹配行Q然后在W?个表中等{。当所有的表被处理完,它输出选择的列q且回溯表列表直到找C个表有更多的匚w行,从该表读入下一行ƈl箋处理下一个表? 从EXPLAIN的输出包括下面列Q? table 输出的行所引用的表? type 联结cd。各U类型的信息在下面给出? possible_keys possible_keys列指出MySQL能用哪个烦(ch)引在该表中找到行。注意,该列完全独立于表的次序。这意味着在possible_keys中的某些键实际上不能以生成的表次序用。如果该列是I的Q没有相关的索引。在q种情况下,你也许能通过(g)验W(xu)HERE子句看是否它引用某些列或列不是适合索引来提高你的查询性能。如果是q样Q创造一个适当的烦(ch)引ƈ且在用EXPLAIN(g)查查询。见7.8 ALTER TABLE句法。ؓ(f)?jin)看清一张表有什么烦(ch)引,使用SHOW INDEX FROM tbl_name? key key列显CMySQL实际军_使用的键。如果没有烦(ch)引被选择Q键是NULL? key_len key_len列显CMySQL军_使用的键长度。如果键是NULLQ长度是NULL。注意这告诉我们MySQL实际用一个多部键值的几个部分? ref ref列显C哪个列或常Ckey一L(fng)于从表中选择行? rows rows列显CMySQL怿它必L验以执行查询的行数? Extra 如果Extra列包括文字Only indexQ这意味着信息只用索引?wi)中的信息检索出的。通常Q这比扫描整个表要快。如果Extra列包括文字where usedQ它意味着一个WHERE子句被用来限制哪些行与下一个表匚w或发向客戗? 不同的联l类型列在下面,以最好到最差类型的ơ序Q? system 表仅有一?=pȝ?。这是const联结cd的一个特例? const 表有最多一个匹配行Q它?yu)在查询开始时被读取。因Z有一行,在这行的列值可被剩下的优化器认为是常数?const表很快,因ؓ(f)它们只读取一ơ! eq_ref 对于每个来自于先前的表的行组合,从该表中d一行。这可能是最好的联结cdQ除?jin)constcd。它用在一个烦(ch)引的所有部分被联结使用q且索引是UNIQUE或PRIMARY KEY? ref 对于每个来自于先前的表的行组合,所有有匚w索引值的行将从这张表中读取。如果联l只使用键的最左面前缀Q或如果键不是UNIQUE或PRIMARY KEYQ换句话_(d)如果联结不能Z键值选择单个行的?Q用ref。如果被使用的键仅仅匚w一些行Q该联结cd是不错的? range 只有在一个给定范围的行将被检索,使用一个烦(ch)引选择行。ref列显C哪个烦(ch)引被使用? index q与ALL相同Q除?jin)只有?ch)引树(wi)被扫描。这通常比ALL快,因ؓ(f)索引文g通常比数据文件小? ALL 对于每个来自于先前的表的行组合,要做一个完整的表扫描。如果表格是W一个没标记const的表Q这通常不好Qƈ且通常在所有的其他情况下很差。你通常可以通过增加更多的烦(ch)引来避免ALLQ得行能从早先的表中基于常数值或列D(g)索出? 通过怹EXPLAIN输出的rows行的所有|你能得到一个关于一个联l要多好的提C。这应该_略地告诉你MySQL必须(g)验多行以执行查询。当你用max_join_size变量限制查询Ӟ也用q个数字。见10.2.3 调节服务器参数? 下列例子昄Z个JOIN如何能用EXPLAIN提供的信息逐步被优化? 假定你有昄在下面的SELECT语句Q你使用EXPLAIN(g)验:(x) EXPLAIN SELECT tt.TicketNumber, tt.TimeIn, tt.ProjectReference, tt.EstimatedShipDate, tt.ActualShipDate, tt.ClientID, tt.ServiceCodes, tt.RepetitiveID, tt.CurrentProcess, tt.CurrentDPPerson, tt.RecordVolume, tt.DPPrinted, et.COUNTRY, et_1.COUNTRY, do.CUSTNAME FROM tt, et, et AS et_1, do WHERE tt.SubmitTime IS NULL AND tt.ActualPC = et.EMPLOYID AND tt.AssignedPC = et_1.EMPLOYID AND tt.ClientID = do.CUSTNMBR; 对于q个例子Q假定:(x) 被比较的列被声明如下Q???列类? tt ActualPC CHAR(10) tt AssignedPC CHAR(10) tt ClientID CHAR(10) et EMPLOYID CHAR(15) do CUSTNMBR CHAR(15) 表有昄在下面的索引Q??索引 tt ActualPC tt AssignedPC tt ClientID et EMPLOYIDQ主键)(j) do CUSTNMBRQ主键)(j) tt.ActualPCg是均匀分布的? 开始,在Q何优化被施行前,EXPLAIN语句产生下列信息Q? table type possible_keys key key_len ref rows Extra et ALL PRIMARY NULL NULL NULL 74 do ALL PRIMARY NULL NULL NULL 2135 et_1 ALL PRIMARY NULL NULL NULL 74 tt ALL AssignedPC,ClientID,ActualPC NULL NULL NULL 3872 range checked for each record (key map: 35) 因ؓ(f)typeҎ(gu)张表是ALLQ这个输出显CMySQL正在Ҏ(gu)有表q行一个完整联l!q将q当长的时_(d)因ؓ(f)必须(g)验每张表的行数的乘积ơ数Q对于一个实例,q是74 * 2135 * 74 * 3872 = 45,268,558,720行。如果表更大Q你只能惌它将花多长时?#8230;… 如果列声明不同,q里的一个问题是MySQL(q?不能高效地在列上使用索引。在本文中,VARCHAR和CHAR是相同的Q除非他们声明ؓ(f)不同的长度。因为tt.ActualPC被声明ؓ(f)CHAR(10)q且et.EMPLOYID被声明ؓ(f)CHAR(15)Q有一个长度失配? Z(jin)修正在列长度上的不同Q用ALTER TABLEActualPC的长度从10个字W变?5个字W:(x) mysql> ALTER TABLE tt MODIFY ActualPC VARCHAR(15); 现在tt.ActualPC和et.EMPLOYID都是VARCHAR(15)Q再执行EXPLAIN语句产生q个l果Q? table type possible_keys key key_len ref rows Extra tt ALL AssignedPC,ClientID,ActualPC NULL NULL NULL 3872 where used do ALL PRIMARY NULL NULL NULL 2135 range checked for each record (key map: 1) et_1 ALL PRIMARY NULL NULL NULL 74 range checked for each record (key map: 1) et eq_ref PRIMARY PRIMARY 15 tt.ActualPC 1 q不是完的Q但是是好一些了(jin)(rows值的乘积了(jin)一?4一个因?Q这个版本在几秒内执行? W?U改变能消除tt.AssignedPC = et_1.EMPLOYID和tt.ClientID = do.CUSTNMBR比较的列的长度失配:(x) mysql> ALTER TABLE tt MODIFY AssignedPC VARCHAR(15), MODIFY ClientID VARCHAR(15); 现在EXPLAIN产生的输出显C在下面Q? table type possible_keys key key_len ref rows Extra et ALL PRIMARY NULL NULL NULL 74 tt ref AssignedPC,ClientID,ActualPC ActualPC 15 et.EMPLOYID 52 where used et_1 eq_ref PRIMARY PRIMARY 15 tt.AssignedPC 1 do eq_ref PRIMARY PRIMARY 15 tt.ClientID 1 q?#8220;几乎”象它能得到的一样好? 剩下的问题是Q缺省地QMySQL假设在tt.ActualPC列的值是均匀分布的,q且对tt表不是这栗幸好,很容易告诉MySQL关于q些Q? shell> myisamchk --analyze PATH_TO_MYSQL_DATABASE/tt shell> mysqladmin refresh 现在联结?#8220;完美”的了(jin)Q而且EXPLAIN产生q个l果Q? table type possible_keys key key_len ref rows Extra tt ALL AssignedPC,ClientID,ActualPC NULL NULL NULL 3872 where used et eq_ref PRIMARY PRIMARY 15 tt.ActualPC 1 et_1 eq_ref PRIMARY PRIMARY 15 tt.AssignedPC 1 do eq_ref PRIMARY PRIMARY 15 tt.ClientID 1 注意在从EXPLAIN输出的rows列是一个来自MySQL联结优化器的“教育猜测”Qؓ(f)?jin)优化查询,你应该检查数字是否接q事实。如果不是,你可以通过在你的SELECT语句里面使用STRAIGHT_JOINq且试着在在FROM子句以不同的ơ序列出表,可能得到更好的性能?br>
转蝲Q?a >http://www.99net.net/doc/database/1076488199/1076552137.html
]]>
þۺϾƷþ |
97þþþƷר |
þùƷ99þþþþ |
þۺɫ |
ƷþþĻѿ
|
˼˼þúúȾƷ |
Ʒþþþѿ |
ҹҹݺݾþö |
99þ99þþƷ |
þþȹ͵ۺ |
ݺɫþþۺϲ |
þһۺ |
avþþþòվ |
ձƷһþþ |
þþƷһ |
þwww˳ɿƬ |
Ӱһþþþó˾Ʒۺ
|
þþavҰһ |
Ʒgzþþ |
ղƷþþþþþɫ |
91Ʒþþþþ91 |
99Ʒ99þþþþ97 |
91þø˾Ʒ |
þҹӰԺѹۿ |
һŮȫƾþƬ |
þþ |
պavþþƷ |
ھƷ˾þþӰԺ |
þþWWW˳ɾƷ |
ҹƷþ2021 |
þþþƷվ |
þþþAVվ
|
ɫۺϾþþþһ |
ŷ鶹þþþþ |
ɫۺϾþþþ |
þþþƷ |
ձƷþþþĻ8 |
ݺݺݾþ |
97þùƷ |
þþþƷһ |
þùƷӰԺ |