接上一篇博客:外链网址已屏蔽。确定了表设计:

CREATE TABLE `customer` (

`Name` varchar(80) NOT NULL,

`CardNo` varchar(10) DEFAULT NULL,

`Descriot` varchar(100) DEFAULT NULL,

`CtfTp` varchar(4) DEFAULT NULL,

`CtfId` varchar(40) DEFAULT NULL,

`Gender` varchar(8) DEFAULT NULL,

`Birthday` int(9) DEFAULT NULL,

`Address` varchar(100) DEFAULT NULL,

`Zip` int(10) DEFAULT NULL,

`Dirty` varchar(20) DEFAULT NULL,

`District1` varchar(6) DEFAULT NULL,

`District2` varchar(4) DEFAULT NULL,

`District3` varchar(6) DEFAULT NULL,

`District4` varchar(6) DEFAULT NULL,

`District5` varchar(8) DEFAULT NULL,

`District6` varchar(20) DEFAULT NULL,

`FirstNm` varchar(50) DEFAULT NULL,

`LastNm` varchar(20) DEFAULT NULL,

`Duty` varchar(20) DEFAULT NULL,

`Mobile` varchar(40) DEFAULT NULL,

`Tel` varchar(40) DEFAULT NULL,

`Fax` varchar(40) DEFAULT NULL,

`EMail` varchar(60) DEFAULT NULL,

`Nation` varchar(25) DEFAULT NULL,

`Taste` varchar(100) DEFAULT NULL,

`Education` varchar(20) DEFAULT NULL,

`Company` varchar(80) DEFAULT NULL,

`CTel` varchar(20) DEFAULT NULL,

`CAddress` varchar(60) DEFAULT NULL,

`CZip` int(8) DEFAULT NULL,

`Family` int(10) DEFAULT NULL,

`Version` datetime DEFAULT NULL,

`id` int(11) NOT NULL,

PRIMARY KEY (`id`),

KEY `index_Name_Id` (`Name`, `id`) USING BTREE,

KEY `index_CtfId_Id` (`CtfId`, `id`) USING BTREE

) ENGINE=MyISAM DEFAULT CHARSET=utf8 ;

1、参数设置

由于是查询为主的数据库,所以选用了MyISAM数据库引擎。开始使用前需要配置一下参数,参考文章:外链网址已屏蔽 ,主要修改这个参数。

key_buffer_size (global)

Key Buffer 可能是大家最为熟悉的一个 MySQL 缓存参数了,尤其是在 MySQL 没有更换默认存储引擎的时候,很多朋友可能会发现,默认的 MySQL 配置文件中设置最大的一个内存参数就是这个参数了。key_buffer_size 参数用来设置用于缓存 MyISAM存储引擎中索引文件的内存区域大小。如果我们有足够的内存,这个缓存区域最好是能够存放下我们所有的 MyISAM 引擎表的所有索引,以尽可能提高性能。 此外,当我们在使用MyISAM 存储的时候有一个及其重要的点需要注意,由于 MyISAM 引擎的特性限制了他仅仅只会缓存索引块到内存中,而不会缓存表数据库块。所以,我们的 SQL 一定要尽可能让过滤条件都在索引中,以便让缓存帮助我们提高查询效率。 所以,该值是越大越好,在/etc/f文件的[mysqld]头下,增加:

key_buffer_size=1024M #我的系统内存是2G

注意:1024M是根据系统的内存来设置,要留点内存给系统用。

为了避免乱码问题,全部采用utf8编码。

2、建表索引说明 关于为什么索引能够提高效率,请参看这篇文章:

外链网址已屏蔽

之所以需要建立复合索引:

需要通过索引关键字去查找id(确保这个过程是在内存中进行)

由于复合索引检索时只以第一个为准,所以检索关键字需要放在第一个位置,只能是(name, id) 不能是(id, name)

但是,在索引查询的时候需要注意几个问题:

条件过滤时,最好在索引上完成过滤,回表只是取出额外的数据字段;

过滤条件好的字段要更靠前;

当读取的数据量占整个数据比例很大,使用索引不一定优于全表扫描;注:在有些模糊查询中,索引检索结果有2百万左右时,再去回表查数据就很慢

一次数据访问一般只能利用到一个索引,也就是说并不是所有where条件都能用上索引。

3、检索时SQL语句优化

条件扫描时,不要搞这种: # 虽说是要走索引,但是回表操作太慢

select * from customer where name like '陈%';

# 没有关联的索引也不要使用, name 和 ctfid 之间没有关联

select id, name, ctfid from customer_bk where name like '徐%' ;

慎用两个索引条件一起使用,同1,部分走索引,然后回表取数据,再对比 explain select id from customer_bk where name like '徐%' and ctfid like '5%';

# 哪个条件放前面都无所谓,MySQL内部优化了,取数据量少的索引,然后再对比其他条件

避免类似IN的子查询,不能出现如下的SQL语句:

select * from customer where id in (select id from customer where name like '陈');# 通过 explain 语句,可以分析其检索范围 mysql> explain select * from customer_bk where id in (select id from customer_bk where name like '陈'); +----+--------------------+-------------+-----------------+-----------------------+---------+---------+------+----------+-------------+ | id | select_type        | table       | type            | possible_keys         | key     | key_len | ref  | rows     | Extra       | +----+--------------------+-------------+-----------------+-----------------------+---------+---------+------+----------+-------------+ |  1 | PRIMARY            | customer_bk | ALL             | NULL                  | NULL    | NULL    | NULL | 20050144 | Using where | |  2 | DEPENDENT SUBQUERY | customer_bk | unique_subquery | PRIMARY,index_Name_Id | PRIMARY | 4       | func |        1 | Using where | +----+--------------------+-------------+-----------------+-----------------------+---------+---------+------+----------+-------------+ 2 rows in set (0.00 sec)

4、其他优化

表Customer含有大量不需要的字段,可以考虑分表。但是对于这个简单业务来说,可以忍受的。

编码问题,在只有中文和英文的情况下,可以考虑只使用latin1编码,减少数据存储量。

2000w mysql_MySQL数据库优化(基于酒店2000w条数据)相关推荐

  1. laravel mysql rand_laravel如何从mysql数据库中随机抽取n条数据(高性能) - Laravel学习网...

    laravel如何高性能地从mysql数据库中随机获取n条数据,有时候我们常常会需要从数据库随机获取数据,比如:给工作人员随机分配10个订单,随机从数据库中随机抽查100个用户:这样我们就需要随机从数 ...

  2. 为什么注册页面刷新一次,数据库就多了一条数据?????

    web项目为什么点击注册按钮跳转不到注册页面?(上一篇博客) 从上次注册页面能成功访问之后(上一篇博客),我就开始编写注册页面.最终成功的将用户名和密码插入到数据库中! 但是问题百出!我登录刚刚注册的 ...

  3. oracle数据库取前几行,Oracle数据库实现获取前几条数据的方法

    如何在Oracle数据库中实现获取前几条数据的方法呢?就是类似SQL语句中的SELECT TOP N的方法.本文将告诉您答案,举例说明了哟! 1.在Oracle中实现SELECT TOP N : 由于 ...

  4. 冷热分离和直接使用大数据库_基于 MySQL 的热数据与冷数据分离设计与实现

    作为一家提供商业气象数据服务的创业公司,我们一直都有一项「欠交的作业」没有完成,那就是合理的数据规划和数据治理规范.对于早期的初创公司而言,可能很难从一开始就能构想到需要对数据存储进行合理的规划并制定 ...

  5. 【十】JDBC:使用 jmeter 批量在数据库创建 1 万多条数据;批量删除重复数据

    目录 一.批量创建1万多条数据 二.批量删除重复数据 一.批量创建1万多条数据 数据库车辆信息表中准备10000多台车的数据: (1)创建线程组,循环1次: (2)连接数据池: (3)添加循环控制器, ...

  6. java 将数据库中的每一条数据取出放入数组或者List中

    1.如何将数据库中数据按照行(即一整条数据)取出来,存入到数组当中? public static String str = null; // 将StringBuffer转化成字符串public sta ...

  7. oracle+获取最后一行数据库,获取表最后一条数据

    数据库中如何查询表的最后一条记录? MySql : SELECT * FROM 表名 ORDER BY 表_ID DESC LIMIT 1 SQLServer/Oracle : SELECT TOP ...

  8. mongodb 基于3千万条数据, 查询30万结果集,分页问题

    2019独角兽企业重金招聘Python工程师标准>>> 场景: 1 数据表容量 3千万 2 查询结果集: 30万 3 skip  limit(200) 分页, 存在排序 4 内存控制 ...

  9. sql server批量插入数据库的操作100万条数据

    1.数据库中 首先创建表->连接数据库->通过循环插入数据 2.建立测试表 在这里插入代码[c-sharp] view plain copy --Create DataBase creat ...

  10. oracle查询前五条数据库,Oracle查询前几条数据的方法详解

    在Oracle中实现select top N: 由于Oracle不支持select top 语句,所以在Oracle中经常是用order by 跟rownum 的组合来实现select top n的查 ...

最新文章

  1. 人工智能在未来将要经历的七个阶段
  2. 中国机器人产业发展报告(2019)正式发布!
  3. 【深度学习的数学】超平面是什么?(自由度比空间维度小1)
  4. IPV6地址校验(java)
  5. Mysql中怎样设置指定ip远程访问连接
  6. 转载:【Data Management】PhotoLocations源程序
  7. php 两个类 相互调用_如何在 PHP 和 Laravel 中使用 Traits
  8. 在Windows和Azure中使用加密证书提高web.config的安全性
  9. 关键路径 - 数据结构和算法67
  10. KL散度、JS散度 的理解以及一些问题
  11. C#--打包安装项目
  12. sqlite可视化工具sqliteman的问题
  13. 语音识别(html5+nodejs)
  14. 关于“知识共享”的几个基本概念
  15. html 评分星级显示,星级评分效果.html
  16. 轻量级的肝脏与肝肿瘤 2.5D 分割网络阅读笔记
  17. 数据结构与算法综合实验(附完整项目)
  18. Windows上Emwin的使用
  19. 输入输出系统--习题
  20. 如何用python完成评分功能呢_用Python完成PSM(倾向性匹配评分)算法详解

热门文章

  1. 全面认识scratch
  2. 研发、运营必备实用工具网站
  3. 统计自然语言处理第二版 下载
  4. 查看表空间大小和使用率,增加表空间大小的四种方法
  5. 关于DNF的多媒体包NPK文件的那些事儿(4)- NPK文件操作流程
  6. html5个人简历代码模板,个人简历HTML模板
  7. VC6.0内存泄露检测工具
  8. C盘爆满给Android Studio瘦身将sdk移除C盘
  9. java764位_jdk7 64位下载
  10. lammps教程:单原子温度计算及输出方法