mysql 优化

1、数据库中的表越小,在它上面执行的查询也就会越快。

2、表中字段的宽度设得尽可能小。

3、应该使用MEDIUMINT而不是 BIGIN来定义整型字段。

4、尽量把字段设置为NOT NULL,这样在将来执行查询的时候,数据库不用去比较NULL值。

5、“省份”或者“性别”,我们可以将它们定义为ENUM类型。

6、使用连接(JOIN)来代替子查询(Sub-Queries) :

  SELECT * FROM customerinfo WHERE CustomerID NOT in (SELECT CustomerID FROM salesinfo ) 

  改:SELECT * FROM customerinfo LEFT JOIN salesinfoON customerinfo.CustomerID=salesinfo. CustomerID WHERE salesinfo.CustomerID IS NULL 

7、使用联合(UNION)来代替手动创建的临时表 。

8、事务 BEGIN开始  COMMIT提交  ROLLBACK失败回退

9、多用户查询可以锁定表获得优化

  LOCK TABLE teble_name WRITE;

    执行sql

  UNLOCK TABLES;

10、使用外键 
  锁定表的方法可以维护数据的完整性,但是它却不能保证数据的关联性。这个时候我们就可以使用外键。例如,外键可以保证每一条销售记录都指向某一个存在的客户。在这里,外键可以把customerinfo 表中的CustomerID映射到salesinfo表中CustomerID,任何一条没有合法CustomerID的记录都不会被更新或插入到 salesinfo中。 
  CREATE TABLE customerinfo 
  ( 
  CustomerID INT NOT NULL , 
  PRIMARY KEY ( CustomerID ) 
  ) TYPE = INNODB; 
  CREATE TABLE salesinfo 
  ( 
  SalesID INT NOT NULL, 
  CustomerID INT NOT NULL, 
  PRIMARY KEY(CustomerID, SalesID), 
  FOREIGN KEY (CustomerID) REFERENCES customerinfo 
  (CustomerID) ON DELETECASCADE 
  ) TYPE = INNODB; 
  注意例子中的参数“ON DELETE CASCADE”。该参数保证当 customerinfo 表中的一条客户记录被删除的时候,salesinfo 表中所有与该客户相关的记录也会被自动删除。如果要在 MySQL 中使用外键,一定要记住在创建表的时候将表的类型定义为事务安全表 InnoDB类型。该类型不是 MySQL 表的默认类型。定义的方法是在 CREATE TABLE 语句中加上 TYPE=INNODB。如例中所示。

11、使用索引 全文索引在MySQL 中是一个FULLTEXT类型索引。

12、最好是在相同类型的字段间进行比较的操作。

13、在建有索引的字段上尽量不要使用函数进行操作。 

14、应该注意避免在查询中让MySQL进行自动类型转换,因为转换过程也会使索引变得不起作用。 

15、对索引字段运算索引将失效。

16、使用相同效果sql替换link

  例如:SELECT * FROM books  WHERE name like "MySQL%" 
  但是如果换用下面的查询,返回的结果一样,但速度就要快上很多: 
  SELECT * FROM books  WHERE name>="MySQL"and name<"MySQM" 

posted @ 2016-11-04 19:54  wild_kid  阅读(160)  评论(0)    收藏  举报