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"

浙公网安备 33010602011771号