怎么理解mysql优化 mysql优化原理

什么是Mysql优化?优化数据库的方法
1、选取最适用的字段属性
MySQL可以很好的支持大数据量的存?。?但是一般说来,数据库中的表越小,在它上面执行的查询也就会越快 。因此,在创建表的时候,为了获得更好的性能,我们可以将表中字段的宽度设得尽可能小 。
例如,在定义邮政编码这个字段时,如果将其设置为CHAR(255),显然给数据库增加了不必要的空间,甚至使用VARCHAR这种类型也是多余的 , 因为CHAR(6)就可以很好的完成任务了 。同样的 , 如果可以的话,我们应该使用MEDIUMINT而不是BIGIN来定义整型字段 。
另外一个提高效率的方法是在可能的情况下,应该尽量把字段设置为NOT NULL,这样在将来执行查询的时候,数据库不用去比较NULL值 。
对于某些文本字段,例如“省份”或者“性别”,我们可以将它们定义为ENUM类型 。因为在MySQL中,ENUM类型被当作数值型数据来处理,而数值型数据被处理起来的速度要比文本类型快得多 。这样,我们又可以提高数据库的性能 。
2、使用连接(JOIN)来代替子查询(Sub-Queries)
MySQL从4.1开始支持SQL的子查询 。这个技术可以使用SELECT语句来创建一个单列的查询结果,然后把这个结果作为过滤条件用在另一个查询中 。例如,我们要将客户基本信息表中没有任何订单的客户删除掉 , 就可以利用子查询先从销售信息表中将所有发出订单的客户ID取出来,然后将结果传递给主查询 , 如下所示:
DELETEFROMcustomerinfo
WHERECustomerIDNOTin(SELECTCustomerIDFROMsalesinfo)
使用子查询可以一次性的完成很多逻辑上需要多个步骤才能完成的SQL操作,同时也可以避免事务或者表锁死,并且写起来也很容易 。但是,有些情况下 , 子查询可以被更有效率的连接(JOIN)..替代 。例如,假设我们要将所有没有订单记录的用户取出来,可以用下面这个查询完成:
SELECT*FROMcustomerinfo
WHERECustomerIDNOTin(SELECTCustomerIDFROMsalesinfo)
如果使用连接(JOIN)..来完成这个查询工作 , 速度将会快很多 。尤其是当salesinfo表中对CustomerID建有索引的话,性能将会更好,
北大青鸟java培训:mysql数据库的优化方法?我们都知道 , 服务器数据库的开发一般都是通过java或者是PHP语言来编程实现的 , 而为了提高我们数据库的运行速度和效率,数据库优化也成为了我们每日的工作重点,今天,河北IT培训就一起来了解一下mysql服务器数据库的优化方法 。
为什么要了解索引真实案例案例一:大学有段时间学习爬虫,爬取了知乎300w用户答题数据,存储到mysql数据中 。
那时不了解索引 , 一条简单的“根据用户名搜索全部回答的sql“需要执行半分钟左右,完全满足不了正常的使用 。
案例二:近线上应用的数据库频频出现多条慢sql风险提示,而工作以来,对数据库优化方面所知甚少 。
例如一个用户数据页面需要执行很多次数据库查询,性能很慢,通过增加超时时间勉强可以访问,但是性能上需要优化 。
索引的优点合适的索引,可以大大减小mysql服务器扫描的数据量 , 避免内存排序和临时表,提高应用程序的查询性能 。
索引的类型mysql数据中有多种索引类型,primarykey , unique,normal , 但底层存储的数据结构都是BTREE;有些存储引擎还提供hash索引,全文索引 。
BTREE是常见的优化要面对的索引结构,都是基于BTREE的讨论 。
B-TREE查询数据简单暴力的方式是遍历所有记录;如果数据不重复 , 就可以通过组织成一颗排序二叉树,通过二分查找算法来查询,大大提高查询性能 。

推荐阅读