面试时遇到的问题:千万级的mysql数据库如何优化?

作为一个刚入门的phper,遇到这个问题时,我还是压力山大的.还好有一个周末的时间来学习.本文就是这周末三天的整理总结.

方案一:缓存

通过redis或memcache,添加缓存服务器.

原理:将经常查询的内容自动添加到缓存,访问量低的通过正常查询获得,可以让绝大多数的内容从内存中自动访问.

ridis和memcache的区别:

1 Redis不仅仅支持简单的k/v类型的数据,同时还提供list,set,hash等数据结构的存储。

2 Redis支持数据的备份,即master-slave模式的数据备份。

3 Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用。

方案二:添加索引

通过对常用字段添加索引的办法可以极大的提高查询的效率.

注意事项:

1.首先应考虑在 where 及 order by 涉及的列上建立索引。///禁用排名,oder by null

2.可以在 num 上设置默认值 0,确保表中 num 列没有 null 值。

3.不要写一些没有意义的查询.

4.用 exists 代替 in 是一个好的选择.如:select num from a where num in(select num from b);可以用select num from a where exists(select 1 from b where num=a.num);来代替.

5.索引并不是越多越好,索引固然可以提高相应的 select 的效率,但同时也降低了 insert 及 update 的效率,因为 insert 或 update 时有可能会重建索引,所以怎样建索引需要慎重考虑,视具体情况而定。一个表的索引数最好不要超过 6 个,若太多则应考虑一些不常使用到的列上建的索引是否有必要。

6.尽量使用数字型字段,若只含数值信息的字段尽量不要设计为字符型,这会降低查询和连接的性能,并 会增加存储开销。这是因为引擎在处理查询和连接时会逐个比较字符串中每一个字符,而对于数字型而言 只需要比较一次就够了。

7.尽可能的使用 varchar/nvarchar代替 char/nchar, 因为首先变长字段存储空间小, 可以节省存储空间, 其次对于查询来说,在一个相对较小的字段内搜索效率显然要高些。

8.不要使用 select * from t ,用具体的字段列表代替“*”,不要返回用不到的任何字段。

避免全表扫描:

1.避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描。

2.select id from t where name like '%c%';也将导致全表扫描。

3.如果在 where 子句中使用参数,也会导致全表扫描.如:select id from t where num=@num ;可以改为强制查询使用索引:select id from t with(index(索引名)) where num=@num ;

4.在 where 子句中对字段进行表达式操作, 这将导致引擎放弃使用索引而进行全表扫描。如:select id from t where num/2=100;

5.在 where 子句中对字段进行函数操作,这将导致引擎放弃使用索引而进行全表扫描。如:select id from t where substring(name,1,3)='abc';#name 以 abc 开头的 id

方案三:水平分库/分表

原理:一个1000多万条记录的用户表user,查询起来非常之慢,分表的做法是将其散列到100个表中,分别从user_0到user_99,然后根据userId分发记录到这些表中.

方案四:Sphinx等索引工具

原理:Sphinx工具是一个基于SQL的索引检索引擎.原理是将SQL中的数据建立索引,php通过API的方式从Sphinx中获得检索的值.php不直接通过mysql取值.

Sphinx的原理图

Sphinx的特性(优、缺点)

优点:

高速索引 (在新款CPU上,近10 MB/秒);

高速搜索 (2-4G的文本量中平均查询速度不到0.1秒);

高可用性 (单CPU上最大可支持100 GB的文本,100M文档);

提供良好的相关性排名

支持分布式搜索;

提供文档摘要生成;

提供从MySQL内部的插件式存储引擎上搜索

支持布尔,短语, 和近义词查询;

支持每个文档多个全文检索域(默认最大32个);

支持每个文档多属性;

支持断词;

支持单字节编码与UTF-8编码;

支持多字段的检索域

支持MySQL(MYISAM和INNODB)和Postgres数据库

支持windows, linux, unix, mac等平台

缺点:

必须要有主键

主键必须为整型

不负责数据存储

配置不灵活

方案五:读写分离

原理,通过物理的方式来提升mysql的性能.

...未完待续

mysql数据库总结_MySQL数据库优化-总结相关推荐

  1. mysql断网_mysql数据库断网链接

    {"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],&q ...

  2. mysql 关闭锁_mysql数据库取消锁

    {"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],&q ...

  3. mysql数据库应用_MySQL数据库应用 从入门到精通 学习笔记

    以下内容是学习<MySQL数据库应用 从入门到精通>过程中总结的一些内容提要,供以后自己复现使用. 一:数据库 查看所有数据库:SHOW DATABASES 创建数据库:CREATE DA ...

  4. mysql 表上限_mysql 数据库表的上限

    {"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],&q ...

  5. mysql 关联查询_mysql数据库调优(二)

    第五.查询优化 1.查询慢的原因:网络因素.CPU.IO.上下文切换.系统调用.生成统计信息.锁等待时间等 2.优化数据库访问:查询性能地下的原因是访问的数据太多,某些查询不可避免的需要筛选大量的数据 ...

  6. mysql数据库语言_mysql数据库sql语句基础知识

    1.数据库操作 查看当前数据库 SELECT DATABASE(); 显示用户名,数据库版本 SELECT user(), version(); 创建库 CREATE DATABASE[ IF NOT ...

  7. mysql数据库监控程序_mysql数据库监控利器lepus天兔工具安装和部署

    需要的核心包如下: 以下软件包只需要部署在监控机即可.被监控机无需部署. 1.MySQL 5.0及以上(必须,用来存储监控系统采集的数据) 2.Apache 2.2及以上 (必须,WEB服务器运行服务 ...

  8. 数据库 mysql详解_MySQL数据库详解

    一.数据库概述 1.数据库与文件系统文件系统对比. 数据冗余和不一致性 数据访问 数据格式相对独立 数据完整性和原子性 数据的并发访问 数据的安全性问题 2.数据库概念 1.DBMS:数据库管理系统 ...

  9. mysql数据库语法_MySQL数据库基本语法

    SQL WHAT(SQL是什么?) Structured Query Language:结构化查询语⾔ WHY(为何要使用SQL?) 难道仅仅使用SQL Server Management Studi ...

  10. Mysql常用词汇_mysql 数据库常用单词

    说明:以下单词可能有多种含义,此文档只针对编程做解释.单词不多,熟能生巧,每日认真读读写写,效果不错.如有错误,请谅解并指出,谢谢大家! 黄金超 2017-4-7 连接MySQL数据库: mysql ...

最新文章

  1. 第九次作业-测试报告和用户使用手册
  2. 十万浙企上云 阿里云崛起的最大征候?
  3. FPGA的设计艺术(2)FPGA开发流程
  4. iphone开发如何测试?
  5. SMW0 HTML模版的形式上传文件 维护MIME类型
  6. 张帅用赢球庆生 搭档斯托瑟晋级澳网女双八强
  7. 转:json与map互转
  8. CM3计算板I/O编程
  9. 一个SQL更新多条字段
  10. 多线程与NSTimer
  11. 计算机信息安全工程师教材,第二级 系统审计保护级-信息安全工程师教材
  12. python解题工程力学_工程力学学习与解题指导
  13. S3 api 断点下载
  14. SVN commit的时候报错conflicted state
  15. 金山云2018年Q4财报里的“去小米化”
  16. 网易im即时通讯 移动端嵌入web
  17. ★ 我的世界各类奇葩武器实现!(命令方块1.13+)
  18. ClearCase 介绍 1
  19. 【BSP视频教程】STM32H7视频教程第2期:STM32H7四通八达的总线矩阵,从系统框架整体把控H7
  20. Java核心技术 卷1-总结-18

热门文章

  1. 日期,时间相关R代码
  2. oracle中sqldrunl结尾符号,oracle笔记(韩顺平oracle视频教学整理)
  3. 联想笔记本电脑键盘灯怎么开启_【普通背光键盘灯怎么开】联想键盘背光灯怎么开_背光键盘怎么开...
  4. vue导入音乐_苹果vue怎么导入音乐
  5. protel99se中文版
  6. LabVIEW编程LabVIEW开发Memmert oven温箱例程与相关资料
  7. Unity读取TXT文本文件
  8. 屏幕画笔工具Pointofix,期货/股票复盘分析画线好工具
  9. linux下blast设计引物,下面是我设计的引物的BLAST结果,请大虾帮我解释一下。谢谢...
  10. SPC软件:全程监控食品质量