【MySQL基础】MySQL优化汇总

此文档为2013年学习MySQL时总结的,已许久没有更新,后续会持续更新增加。                                                   



1.     当只要一行数据的时候使用LIMIT 1
当只需要查询某一列数据的时候不要用select *,应该用select “字段名”…
应该养成要什么就取什么的习惯


2.     给搜索字段建立索引
当然建立索引需要注意的地方也很多,比如索引字段类型应该是数字类型,而最好不是字符类型,索引应该建立在不经常修改数据的字段上,不要在一个表中过多建立索引等


3.     在进行join查询的时候,要考虑join的两个字段是否是被索引过的,是否是同种类型,并且字符集也应该相同,这样MySQL就能启动优化join的SQL语句机制。


4.     查询的时候不要使用mysql自带的函数,如RAND( ),CURDATE ( )等,应该在程序中实现这些功能,以减轻MySQL的负担


5.     为每一个表设置一个ID
我们应该为数据库中的每张表都设置一个ID作为其主键,而且最好的是一个INT型(UNSIGNED)并设为AUTO_INCREMENT,并注意如果使用字符类型的字段作为主键会引起性能下降。如果是关联表的话,可以另当别论,即两个表互相关联,则这两个表的原来的主键共同组成关联表的主键


6.     当知道字段确定的内容时,如性别字段只有‘男’,‘女’两种内容,则应该用ENUM类型,而不应该用其他的类型


7.     当确定字段中内容的长度时,应该使用char类型,而不应该使用varchar,具体差别可以查阅MySQL API说明文档中char与varchar的区别


8.     尽可能的使用NOT NULL
当你知道某个字段不可能或者不允许为NULL时,应该加上NOT NULL标志,NULL与空(Empty)的区别?NULL也占用空间吗?这是值得探究的问题


9.     在程序中使用Prepared Statements来包裹你的SQL语句,MySQL只会解析一次这些SQL语句,而分开的话MySQL将多次解析SQL语句,并且这样据说也较为安全些(具体是什么地方安全些有考证)。


10.     把IP地址存成UNSIGNED INT
毋庸置疑字段类型是数字类型的比是字符类型的要好,这个好最主要就是体现在性能上。所以存储IP地址的时候可以将IP也存成数字类型的。主要用到两个函数,第一个是将字符串IP转换成整形:INET_ATON(),第二个是将整形转化成一个字符串IP:INET_NTOA()。举例使用如下:
Insert into test values (inet_aton(‘192.168.21.111’));
Insert into test values (inet_aton(‘127.6.52.230’));
Select inet_ntoa(ip) from test;


11.     固定长度的表会更快
这个概念我第一次听说,一个表很不容易全部做到固定长度(特殊需求除外),这里固定长度的表是指表中没有Varchar,Text,Bolb类型,只要包含了其中一个类型就不是固定长度的表。由于字段都是固定长度的,所以查找的时候容易计算出一个数据库的偏移量,但是副作用就是会浪费一些存储空间。


12.     拆分大的Delete或insert语句
按照我的理解,这个概念应该是很有用的,当一个网站的访问量很大的时候,如作业系统在上课的时候,如果有一个操作是插入或者删除过多的信息。这个过程需要锁表,而在这个过程执行的时间内,会累积大量的访问线程/进程,数据库链接等,一不小心服务器就可能出现宕机。


13.字段的数据类型的长度要在允许的范围内尽可能的小,因为这将占用更少的存储空间,并将获取更好的性能。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值