1、选取合适的字段属性
MySQL支持大数据的储存,但是一般来说,数据库中的表越小查询速度越快,所以在建表的时候尽量将表的宽度设小,另一个就是在尽可能的情况下把字段设置为NOTNULL
2、使用连接(JOIN)来代替子查询(Sub-Queries)
MySQL从4.1开始就支持SQL子查询,他可以使用SELECT语句来创建一个单列的查询结果,然后将这个结果作为过滤条件用在另一个查询中比如

SELRCT FROM ** WHERE *** NOT INSELECT *** FROM *

如果使用连接(JOIN)来做查询回快很多尤其使查询字段中有索引的情况下
3、使用联合(UNION)来代替手动创建的临时表
MYSQL从4.0开始支持UNION查询,它可以把需要的使用临时表的select(两条及以上)的select查询合并到一个查询中。在客户端查询会话结束之后,临时表回会自动删除,使用UNION创建查寻时,只需要把UNION作为关键字将多个select语句连接起来(select中的字段数目要相同)

SELECT Name,Age FROM one UNION
SELECT Name,Phone FROM two UNION
SELECT Name,emile FROM three

4、事务
虽然我们可以使用子查询(Sub-Queries)、连接(JIOIN)联合(UNION)来来创建各种查寻,但并不是所有的数据库操作都是可以用一条或几条SQL语句就可以完成的,大多时候我们都需要一系列的语句来完成某种工作,当同时对两个关联表操作时可能会出现一条语句操作成功后,数据库库突然出现意外,第二个没有执行成功,这样就造成数据的不完整,甚至破坏数据中的数据,为了避免发生这种情况,我i们就应该使用事务,他的作用就是,要么全成功,要么全失败,可以保证数据库的一致性和完整性
事务是以BEGIN关键字开始,以COMMIT关键字结束,在这之间的的SQL操作只要一条失败,那么,ROLLBACK命令就可以把数据库恢复到BEGIN开始之前的状态。事务还有一个重要的作用就是当多用户同时操作相同的数据源时,它可以利用锁定数据库的方法来为客户提供安全访问方式,保证用户操作不被其他用户干扰。
5、锁定表
虽然事务是维护数据库完整性的一个好方法,但是它具有独占性,有时候会影响数据库的性能所以我们可以通过使用锁定表表来实现更好的性能,使用有WRITE关键字的sql语句可以保证在UNLPCKTABLES命令执行前,不会有其他的对该表的插入,更新删除操作

LOCK TABLE one WRITE SELECT Name FROM one WHERE Age=11;

...

UPDATE one SET Name ="王五" WHERE Age=16; UNLOCKTABLES

6、使用外键
锁定表方法可以维护数据的完整性,但是不能确保数据的关联性。这时候我们可以使用外键。

CREATE TABLE customerinfo ( CustomerIDINT NOT NULL, PRIMARYKEY ( CustomerID ) ) TYPE = INNODB;
CREATE TABLE salesinfo (
SalesIDNT NOT NULL,
CustomerIDINT NOT NULL,
PRIMARYKEY ( CustomerID, SalesID ),
FOREIGNKEY ( CustomerID ) REFERENCES customerinfo ( CustomerID ) ON DELETE CASCADE 
) TYPE = INNODB;

注意一定要使用参数ON DELETE CASCADE保证数据的一致性,使用外键时在创建表的时候一定要将表的类型定义为事务安全表InnoDB类型。
7、使用索引
建立索引是提高数据库性能的常用方法,它可以使数据库比没有索引快的多的速度检索特定的行,尤其实在有序的情况下性能会更好。
建立索引的时候尽量建在将用于JOIN,WHERE和ORDERBY排序的字段上,尽量不要在含有大量重复的值的字段建立索引
8、优化查询语句
搜索字符型字段时减少使用LIKE关键字和通配符
尽量不要使用自动类型转换
不要在列上进行运算,
不使用NOT IN和<>操作

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐