一、问题分析

  

 sql 优化吗;百万数据怎么优化等

  

  二、 核心答案讲解

  

1、根据服务层面 、配置 mysql 性能优化参数;

2、从系统层面增强 mysql 的性能 、优化数据表结构、字段类型、字段索引、分表,分库、读写分离等等。

3、从数据库层面增强性能 、优化 SQL 语句,合理使用字段索引。

4、从代码层面增强性能 、使用缓存和 MongoDB/Memcached/Redis 来缓解高并发下数据库查询的压力。

5、减少数据库操作次数,尽量使用数据库访问驱动的批处理方法。

6、不常使用的数据迁移备份,避免每次都在海量数据中去检索。

7、提升数据库服务器硬件配置,或者搭建数据库集群。

8、编程手段防止 JDBC PreparedStatement按位插入或查询;正则表达式过滤(非法字符串过滤);

  

  三、问题扩展

 

1、Sql 优化

1)应尽量避免在!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描;

2)应尽量避免在select id from t where num is null可以在 null值,然后这样查询 :

select id from t where num=0;

3)很多时候用 in 是一个好的选择;

4)用 HAVING 只会在检索出所有记录之后才对结果集进行过滤;

5)select count(*) from table;这样不带任何条件的count 会引起全表扫描,并且没有任何业务意义,是一定要杜绝的;

  

2、索引

1)索引概念 、对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息。如果我们把一个表的内容认为是一本字典,那索引就相当于字典的目录

  

2)索引类型 :

​Oracle​​:

Single column 单行索引

Concatenated 多行索引

Unique 唯一索引

NonUnique 非唯一索引

Function-based 函数索引

Domain 域索引

  物理上:

Partitioned 分区索引

NonPartitioned 非分区索引

B-tree :

Normal 正常型 B 树

Rever Key 反转型 B 树

Bitmap 位图索引

MySQL索引分为普通索引、唯一索引、主键索引、组合索引、全文索引

  

3)何时使用索引

unique 字段;

  ②和其他表做连接的字段需要加索引;

is null 和 between

  等字段;

where A like 'China%';

MAX()中的字段;

order by 和 group by 字段;

 

4)索引何时失效

A,B),where B=b 不会使用索引;

like 未使用最左前缀,where A like '%China';

whereA=a order by B,只使用 A 上的索引,因为查询只使用一个索引 ;

or 会使索引失效。如果查询字段相同,也可以使用索引。例如where A=a orB=b(失效)

 whereA='China',否则索引失效(会进行类型转换);

upper()等)、or、!=(<>)、not in 等;

  

作者: 王春天

QQ交流:903639067

  四、结合项目中使用

  

1.常用但不经常修改的字段建索引(譬如商品表的商品名称等字段),达到检索速度增快,用户体验度增高的目的

2.用 mycat 进行分库分表

"列"进行,某个表字段较多,可以新建一张扩展表,将不经常用或字段长度较大的字段拆分出去到扩展表中。例如用户表,在字段很多的情况下(例如一个大表有"大表拆小表",更便于开发与维护,也能避免跨页问题

  水平分表

  水平切分分为库内分表和分库分表,是根据表内数据内在的逻辑关系,将同一个表按不同的条件分散到多个数据库或多个表中,每个表中只包含一部分数据,从而使得单个表的数据量变小,达到分布式的效果(如订单表)

 

作者: 王春天

QQ群:322581894
关于作者:
大连天翼信息科技有限公司 技术总监。
SNF快速开发平台 创始人。应用平台架构师、IT规划咨询专家、业务流程设计专家。
专注于快速开发平台的开发、代码生成器。同时专注于微软平台项目架构、管理和企业解决方案,多年项目开发与管理经验,精通DotNet系列技术Vue、.NetCore、MVC、Webapi、C#、WinForm等,DB(SqlServer、Oracle等)技术,移动端开发。熟悉Java、VB及PB开发语言。在面向对象、面向服务以及数据库领域有一定的造诣。现从事项目实施、开发、架构等工作。并从事用友软件产品U8、U9、PLM 客开工作。