转自大宇的博文 1.使用MyISAM而不是InnoDB 完全错误,反驳理由: 首先原文说MyISAM是默认使用的,而实际上到了MySQL 5.5.x,InnoDB已经成为了默认的表引擎。 另外,简单的使用InnoDB不是解决所有问题的方法,盲目的使用甚至会使应用性能下降10%乃至40%。 最佳方法还是针对具体业务具体处理,例如论坛中版块表,
int(M) 注意:这里的M代表的并不是存储在数据库中的具体的长度,以前总是会误以为int(3)只能存储3个长度的数字,int(11)就会存储11个长度的数字,这是大错特错的。 其实当我们在选择使用int的类型的时候,不论是int(3)还是int(11),它在数据库里面存储的都是4个字节的长度,在使用int(3)的时候如果你输入的是10,会默认给你存储位010,也就是说这个3代表的是默认的一个
调度和锁定 MYSQL的默认调度策略如下: *写入比读取有更高的优先权 *对数据表的写操作必须按照写请求先来后到的顺序一个一个的进行 *同一个数据表进行的读操作可以同时进行 *对数据表进行写入操作的客户程序必须具有对数据表唯一访问的锁定 LOW_PRIORITY关键字影响DELETE INSERT LOAD_DATA REPLACE 和 UPDATE语句的调度
为提高查询效率而挑选数据类型 尽量使用数值操作,少使用字符串操作 如果字符串数据列的可取值是有限的,选用ENUM或SET类型可以在数值操作中受益,这些类型在MYSQL内部是以数值的形式表示的 如果小类型够用,就不要选择大类型 如果INT够用就不必使用BIGINT 如果能选择数据行的存储格式,就应该尽量选择最适用你的存储引擎的格式 对于MYISAM来说,应该选择使
当我们发出一个选区数据行的查询时,MYSQL会分析他,并考虑是否可以对他进行优化以加快查询 如果你发布了下面的查询,不管数据表有多复杂MYSQL都会迅速的告诉你结果 mysql> EXPLAIN SELECT * FROM tt1 WHERE FALSEG *************************** 1. row *************************
使用索引 用来加快查询的技术有很多,其中最重要的索引,通常,能够造成查询速度最大差异的是索引是否正确使用,虽然很多情况并不是你加上索引就能迅速的解决问题,不过你不使用索引,而拼命使用其他技术来优化查询的话,我只能说你纯粹在浪费时间 1.索引的优点 一个没有索引的数据表其实可以理解为是一个无序的数据行集合,如果想找到某个特定的数据行,我们需要遍历整个表中的每条数据
mysql> CREATE PROCEDURE mio_insert_t -> (IN table_name CHAR(5)) -> BEGIN -> DECLARE i INT; -> SET i = 0; -> WHILE i < 1000 DO -> INSERT INTO table_name SET `id`=i,`val`=i; -> SET
触发器(trigger)与数据表关联,当那个数据表被INSERT DELETE UPDATE语句修改时,触发器自动执行 mysql> delimiter $ mysql> CREATE TRIGGER user_list_insert BEFORE INSERT ON user_list -> FOR EACH ROW BEGIN -> IF NEW.nam
存储函数(stored function) 返回一个计算结果,该结果可以用在表达式里 存储过程(stored procedure)不直接返回一个结果,但可以同来完成一般的运算或是生成一个结果集并传递给客户 复合语句 mysql> delimiter $ mysql> CREATE PROCEDURE show_times() -> BEGIN -> SELECT
利用外键(goreign key)关系可以再某个数据表里声明与另一个数据表里的某个索引相关的关联索引,还可以把你想试驾在数据表上的约束条件放到外键关系里,让系统根据这个关系里的规则来维护数据引用的完整性 父表:包含原始数据的表 子表:引用父表中的键值的相关数据表 [CONSTRAINT constraint_name] FOREIGN KEY [fk_name] (inde