mysql优化
主要优化策略如下(以下内容也是结合自身开发经验外加整理网上的资料):
1、为字段选择合适的属性
1)如果字段比较短
比如姓名那么可以使用CHAR而不是VARCHAR。
2)属性的定长也要尽量的短
能用VARCHAR(10)的就劲量不用VARCHAR(255)。
3)为表字段选属性时候劲量使用int类型代替字符串
比如省份、市区字段可以劲量使用int代替VARCHAR,比如用0代替广东省,因为数字查询速度更快。
2、使用连接查询代替子查询
使用显示内连接(join…on)或者隐示内连接代替子查询可以避免在内存中创建零时表,所以效率会更高一点。
3、劲量少使用LIKE关键字和通配符
SELECT * FROM student WHERE name like "王*";
4、使用limit优化查询
Limit 的使用,会大大提升无效数据的检索,因为mysql要先检索全部,再取得想要的。使用limit可以缩小检索的数据范围。
select * from table LIMIT 5;
LIMIT n等价于Mysql LIMIT 0,n
5、使用联合(UNION)来代替手动创建的临时表
union查询可以把临时表的查询结果合并的一个查询中,多个 SELECT 语句会删除重复的数据。在客户端的查询会话结束的时候,临时表会被自动删除,就不会占用额外内存。使用union来创建查询的时候,所有select语句中的字段数目要想同。
6、合理使用索引
MySQL索引其实就是一张表,该表保存了主键与索引字段,并指向实体表的记录。
MySQL索引的建立对于MySQL的高效运行是很重要的,索引可以大大提高MySQL的检索速度,尤其是在where条件、ORDERBY这些命令的时候,性能提高更为明显。但是对于那些数据重复率比较大的字段最好不要建立索引,另外建有索引的字段上尽量不要使用函数进行操作,否则速度比较慢。虽然索引大大提高了查询速度,同时却会降低更新表的速度,如对表进行INSERT、UPDATE和DELETE。因为更新表时,MySQL不仅要保存数据,还要保存一下索引文件;同时建立索引会占用磁盘空间的索引文件,所以不要建太多的索引。
创建索引
CREATE INDEX indexName ON mytable(username(length));
CREATE TABLE mytable(
ID INT NOT NULL,
username VARCHAR(16) NOT NULL,
INDEX [indexName] (username(length))
);
7、使用事务保证数据库安全
在 MySQL 中只有使用了 Innodb 数据库引擎的数据库或表才支持事务,事务处理可以用来维护数据库的完整性,保证成批的 SQL 语句要么全部执行,要么全部不执行,事务可以用来管理 insert,update,delete 语句。
事务的4个特性: 原子性、一致性、隔离性、持久性。
原子性: 一个事务中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态。
一致性: 在事务开始之前和事务结束以后,数据库的完整性没有被破坏。
隔离性: 数据库允许多个并发事务同时对其数据进行读写和修改的能力,隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致。
持久性: 事务处理结束后,对数据的修改就是永久的,即便系统故障也不会丢失。
事务关键字段
BEGIN 开始一个事务
ROLLBACK 事务回滚
COMMIT 事务确认
事务会影响数据库性能,事务具有独占性,事务会将数据表锁定,新的操作只能等待事务结束。