SQL的优化

一。SQL怎么优化执行效率跟高?
1 SQL优化的原则是:将一次操作需要读取的BLOCK数降到最低,最短的时间达到最大的吞吐量。
2 调整不良SQL通茶行可以以下几点切入:
(1)检查不良的SQL,考虑其写法是否还有课优化的内容;
(2)检查子查询 考虑SQL的子查询是否可以用简单连接的方式进行重新书写
(3)检查优化索引的使用;
(4)考虑数据库的优化器;
3 避免出现 select * from table;语句,要明确查询的字段
4 在一个SQL语句中,如果一个where条件过滤的数据库记录越多,定位越准确,则该5 where条件越应该前移。
5 在判断有无符合条件的记录是建议不要用select count(*)和select top 1 语句
6 使用内层限定原则,在拼写SQL语句时,将查询条件分解,分类,并尽量在SQL语句的最里层进行限定,以减少数据的处理量。
7 应该绝对避免在order by子句中使用表达式;
8 如果需要从关联表中读数据,关联表一般不要超过7个;
9 小心使用In和or 需要注意in集合中的数据量,建议集合的数量不超过200 个;
10 <>用<,>代替,>用>=代替,<用<=代替,这样可以有效利用索引。
11 在查询时尽量减少对多余数据的读取包括多余的列与多余的行。

二.根据以往的经验简单叙述一下mysql的优化
1.数据库的设计
尽量把数据库设计的更小的占磁盘空间
(1)尽可能使用更小的整数类型
(2)尽可能定义字段为not null,除非这个字段需要null;
(3)如果没有用到变长字段的话比如varchar,那就采用固定大小的记录格式比如char;
(4)表的主索引应该尽量的短,这样的话每条记录都有名字标志却更高效;
(5)只创建确实需要的索引。索引有利于检索记录,但不利于快速保存记录,如果总是要在表的组合字段上做搜索,要么就在这些字段上创建索引。索引的第一部分必须是最常用的字段,如果总是需要用到恨多字段,首先就应该多复制这些字段使索引更好的压缩。
(6)所有的数据都得在保存到数据库前进行处理。
(7)所有字段都得有默认值;
(8)在某些情况下,把一个频繁扫描的表分成了两个速度会快好多。在对动态格式表扫描取的相关记录是,他可以使用更小的静态格式表的情况下更是如此。
2.系统的用途
(1)尽量使用长链接;
(2)。explain 复杂的SQL语句;
3).如果两个关联表要做比较话,做比较的字段必须类型和长度都一致.
4).LIMIT 语句尽量要跟 order by 或者 distinct.这样可以避免做一次 full table scan.
5).如果想要清空表的所有记录,建议用 truncate table tablename 而不是 delete from tablename.
6).能使用 STORE PROCEDURE 或者 USER FUNCTION 的时候.
7).在一条insert 语句中采用多重纪录插入格式.而且使用load data infile 来导入大量数据,这比单纯的 indert 快好多.
8).经常 OPTIMIZE TABLE 来整理碎片.
9).还有就是 date 类型的数据如果频繁要做比较的话尽量保存在 unsigned int 类型比较快。
3.系统的瓶颈
1).磁盘搜索.
并行搜索,把数据分开存放到多个磁盘中,这样能加快搜索时间. 2).磁盘读写(IO)
可以从多个媒介中并行的读取数据。3).CPU 周期
数据存放在主内存中.这样就得增加 CPU 的个数来处理这些数据。4).内存带宽
当 CPU 要将更多的数据存放到 CPU 的缓存中来的话,内存的带宽就成了瓶颈.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值