Sql语句优化有哪些?数据库的优化怎样优化?

可以从几个方面考虑:

优化表结构

  • 尽量使用数字型字段。若只含数值信息的字段尽量不要设计为字符型,这会降低查询和连接的性能,并会增加存储开销。这是因为引擎在处理查询和连接时会逐个比较字符串中每一个字符,而对于数字型而言只需要比较一次就够了。
  • 尽可能的使用 varchar 代替 char。可变长字段存储空间小,可以节省存储空间。
  • 当索引列大量重复数据时,可以把索引删除掉。比如有一列是性别,只有男、女,这样的索引是无效的。

优化查询

  • 应尽量避免在 where 子句中使用 != 或 <> 操作符,否则将引擎放弃使用索引而进行全表扫描。
  • 应尽量避免在 where 子句中使用 or 来连接条件,如果一个字段有索引,一个字段没有索引,将导致引擎放弃使用索引而进行全表扫描。建议使用 union 替换 or
  • 应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描
  • in 和 not in 也要慎用,否则会导致全表扫描
  • 优化嵌套查询时可以将子查询尽量替换为多表连接查询(JOIN
  • 任何查询也不要出现select *

索引优化

  • 尽量使用复合索引,而少使用单列索引
  • 最左前缀法则:如果索引了多列,要遵守最左前缀法则。指的是查询从索引的最左前列开始,并且不跳过索引中的列
  • 对作为查询条件和 order by的字段建立索引
  • 对查询进行优化,要尽量避免全表扫描,首先应考虑在 whereorder by 涉及的列上建立索引

其他优化

当进行数据的insert操作的时候,可以考虑采用以下几种优化方案:

  • 如果需要同时对一张表插入很多行数据时,应该尽量使用多个值表的insert语句,这种方式将大大的缩减客户端与数据库之间的连接、关闭等消耗。使得效率比分开执行的单个insert语句快。
  • 手动开启事务后在进行数据插入
  • 数据有序插入(按主键)

索引失效情况:

1.  遵循最左前缀法则

如果在查询的时候, 使用了复合索引, 要遵循最左前缀法则, 也就是查询从索引的最左列开始, 并且不能跳过索引中的列.如果不包含最左边的索引列, 则其他索引不生效;如果包含了最左边的索引列, 但是跳过了一列直接索引了复合索引的第三列, 则第三列的索引不生效.

2. 不要在索引上使用运算, 否则索引也会失效.

3. 字符串不加引号, 造成索引失效.

4. 尽量使用覆盖索引, 避免select *, 这样能提高查询效率.

5. or关键字连接

用or分割开的条件, 如果or前面的列有索引, or后面的列没有索引, 那么查询的时候索引会失效, 如果一定要用or查询, 可以考虑下or连接的条件列都加索引, 这样就不会失效了.

6. like模糊查询

在使用like模糊查询时, 如果like%也就是%加在后面索引不会失效, 如果%lik或%like%也就是%加在前面, 索引会失效.

如果查询的列占整张表的绝大多数, 那么就会全表扫描, 不会走索引. 所以在查询的时候走不走索引不能百分百肯定.

也就是说如果查找一个稀有数据, 如果建立了索引, 就会走索引. 如果查询的数据表达绝大多数都符合条件, 就全表扫描, 不走索引.


索引使用原则

为常试用的字段加索引

区分度高的字段适合建立索引

尽量使用联合索引

可以使用前缀索引

不要建立太多索引

将字段设为not null


索引的建立原则

索引的设计需要遵循一些已有的原则, 这样便于提升索引的使用效率, 更高效的使用索引.

1. 对查询频次较高, 且数据量比较大的表, 建立索引.

2. 索引字段的选择, 最佳候选列应当从where子句的条件中提取, 如果where子句中的组合比较多, 那么应当挑选最常用, 过滤效果最好的列的组合.

3. 如果where后有多个条件经常被用到, 建议建立符合 索引, 复合索引需要遵循最左前缀法则, N个列组合而成的复合索引, 相当于创建了N个索引.

复合索引命名规则 index_表名_列名1_列名2_列明3

比如:create index idx_seller_name_sta_addr on tb_seller(name, status, address)

复合索引需要遵循最左前缀法则, N个列组合而成的复合索引, 相当于创建了N个索引. 最左前缀法则

3. 使用唯一索引, 区分度越高, 使用索引的效率越高.

4. 索引并非越多越好, 如果该表赠,删,改操作较多, 慎重选择建立索引, 过多索引会降低表维护效率.

5. 使用短索引, 提高索引访问时的I/O效率, 因此也相应提升了Mysql查询效率.

6. 多表连接的字段上需要建立索引,这样可以极大提高表连接的效率.

7. 排序字段上, 因为排序效率低, 添加索引能提高查询效率.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值