mysql语句优化(mysql数据库中,数据量很大的表,有什么优化方案么)

2025-03-16 00:00:03 0

mysql语句优化(mysql数据库中,数据量很大的表,有什么优化方案么)

本文目录

mysql数据库中,数据量很大的表,有什么优化方案么

个人的观点,这种大表的优化,不一定上来就要分库分表,因为表一旦被拆分,开发、运维的复杂度会直线上升,而大多数公司是欠缺这种能力的。所以MySQL中几百万甚至小几千万的表,先考虑做单表的优化。

单表优化

单表优化可以从这几个角度出发:

  • 表分区:MySQL在5.1之后才有的,可以看做是水平拆分,分区表需要在建表的需要加上分区参数,用户需要在建表的时候加上分区参数;分区表底层由多个物理子表组成,但是对于代码来说,分区表是透明的;SQL中的条件中最好能带上分区条件的列,这样可以定位到少量的分区上,否则就会扫描全部分区。

  • 读写分离:最常用的优化手段,写主库读从库;

  • 增加缓存:主要的思想就是减少对数据库的访问,缓存可以在整个架构中的很多地方,比如:数据库本身有就缓存,客户端缓存,数据库访问层对SQL语句的缓存,应用程序内的缓存,第三方缓存(如Redis等);

  • 字段设计:单表不要有太多字段;VARCHAR的长度尽量只分配真正需要的空间;尽量使用TIMESTAMP而非DATETIME;避免使用NULL,可以通过设置默认值解决。

  • 索引优化:索引不是越多越好,针对性地建立索引,索引会加速查询,但是对新增、修改、删除会造成一定的影响;值域很少的字段不适合建索引;尽量不用UNIQUE,不要设置外键,由程序保证;

  • SQL优化:尽量使用索引,也要保证不要因为错误的写法导致索引失效;比如:避免前导模糊查询,避免隐式转换,避免等号左边做函数运算,in中的元素不宜过多等等;

  • NoSQL:有一些场景,可以抛弃MySQL等关系型数据库,拥抱NoSQL;比如:统计类、日志类、弱结构化的数据;事务要求低的场景。

表拆分

数据量进一步增大的时候,就不得不考虑表拆分的问题了:

  • 垂直拆分:垂直拆分的意思就是把一个字段较多的表,拆分成多个字段较少的表;上文中也说过单表的字段不宜过多,如果初期的表结构设计的就很好,就不会有垂直拆分的问题了;一般来说,MySQL单表的字段最好不要超过二三十个。

  • 水平拆分:就是我们常说的分库分表了;分表,解决了单表数据过大的问题,但是毕竟还在同一台数据库服务器上,所以IO、CPU、网络方面的压力,并不会得到彻底的缓解,这个可以通过分库来解决。水平拆分优点很明显,可以利用多台数据库服务器的资源,提高了系统的负载能力;缺点是逻辑会变得复杂,跨节点的数据关联性能差,维护难度大(特别是扩容的时候)。

希望我的回答,能够帮助到你!我将持续分享Java开发、架构设计、程序员职业发展等方面的见解,希望能得到你的关注。

如何使用phpMyadmin优化MySQL数据库

phpMyadmin仅仅是一个数据库管理工具,与Mysql数据库优化应该是很松耦合的。下面简单谈谈MySql数据库的几个优化点:

1、优化SQL语句

比如尽量少用"select * from ...",需要什么字段返回什么字段,可以有效节省网络IO,缩短查询时间,还可以增加Mysql服务器的吞吐量。

再比如需要select最近一个月的数据,数据量比较大;拆成10次请求,每次请求select三天的,效果可能会好很多。

再比如使用join做表连接的时候,尽量用小表驱动大表,简单来说就是left join,左表是驱动表;right join 右表是驱动表;inner join mysql会自动做优化

学会使用EXPLAIN关键字辅助优化

优化SQL语句是数据库优化的首选;

2、优化表结构

比如字段类型,可以用数字的字段,尽量不要用Text,比如订单Id一般都是数据。

小字段能满足要求的,尽量不要用大字段

根据业务场景,在合适的字段上添加索引,提高搜索速度

适当的做字段冗余和缩减

3、表的拆分

数据库表一般分为纵向拆分和横向拆分,纵向拆分就是将一个表按照列拆分成多个表,通过外键连接。横向拆分就是按照某个字段(比如:时间)做拆分。

数据库拆分

对于数据量太大,或者QPS很大的场景,就需要分库处理。比如设置主库和从库,主库用于写数据,从库用于读数据

以上优化手段,部分可以借助phpMyadmin实现。

更详细的优化手段欢迎点击我的头像,关注我,查看我之前写的Mysql系列文章。

大家觉得这个回答怎么样呢??

Mysql怎样优化处理

1. 避免使用 select * 你需要什么信息,就查询什么信息,查询的多了,查询的速度肯定就会慢

2. 当你只需要查询出一条数据的时候,要使用 limit 1 比如你要查询数据中是否有男生,只要查询一条含有男生的记录就行了,后面不需要再查了,使用Limit 1 可以在找到一条数据后停止搜索

3. 建立高性能的索引 索引不是随便加的也不是索引越多越好,更不是所有索引对查询都有效

4. 建数据库表时,给字段设置固定合适的大小. 字段不能设置的太大,设置太大就造成浪费,会使查询速度变慢

5. 要尽量使用not null

6. EXPLAIN 你的 SELECT 查询 使用EXPLAIN,可以帮助你更了解MySQL是如何处理你的sql语句的, 你可以查看到sql的执行计划,这样你就能更好的去了解你的sql语句的不足,然后优化语句.

7. 在Join表的时候,被用来Join的字段,应该是相同的类型的,且字段应该是被建过索引的,这样,MySQL内部会启动为你优化Join的SQL语句的机制。

8. 如果你有一个字段,比如“性别”,“国家”,“民族”, “省份”,“状态”或“部门”,这些字段的取值是有限而且固定的,那么,应该使用 ENUM 而不是 VARCHAR。

因为在MySQL中,ENUM类型被当作数值型数据来处理,而数值型数据被处理起来的速度要比文本类型快得多。这样,我们又可以提高数据库的性能。

9. 垂直分割 将常用和有关系的字段放在相同的表中,把一张表的数据分成几张表 这样可以降低表的复杂度和字段的数目,从而达到优化的目的

10. 优化where查询

①. 避免在where子句中对字段进行表达式操作

比如: select 列 from 表 where age*2=36; 建议改成 select 列 from 表 where age=36/2;

②. 应尽量避免在 where 子句中使用 !=或 操作符,否则将引擎放弃使用索引而进行全表扫描。

③. 应尽量避免在 where 子句中对字段进行 null 值 判断

④. 应尽量避免在 where 子句中使用 or 来连接条件

11. 不建议使用%前缀模糊查询,这种查询会导致索引失效而进行全表扫描

例如LIKE “%name”或者LIKE “%name%这两种都是不建议的.但是可以使用LIKE “name%”。

对于LIKE “%name%,可以使用全文索引的形式

12. 要慎用in和 not in

例如:select id from t where num in(1,2,3) 建议改成 select id from t where num between 1 and 3

对于连续的数值,能用 between 就不要用 in 了

13. 理解in和exists, not in和not exists的区别

很多时候用 exists 代替 in 是一个好的选择:如查询语句使用了not in那么内外表都进行全表扫描,没用到索引,而not exists子查询依然能用到表上索引,所以无论哪个表大,用not exists都比not 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)

区分in和exists主要是造成了驱动顺序的改变(这是性能变化的关键),如果是exists,那么以外层表为驱动表,先被访问,如果是IN,那么先执行子查询。所以IN适合于外表大而内表小的情况;EXISTS适合于外表小而内表大的情况。

关于not in和not exists,推荐使用not exists,不仅仅是效率问题,not in可能存在逻辑问题

14. 理解select Count (*)和Select Count(1)以及Select Count(column)区别

一般情况下,Select Count (*)和Select Count(1)两着返回结果是一样的

假如表沒有主键(Primary key), 那么count(1)比count(*)快,

如果有主键的話,那主键作为count的条件时候count(主键)最快

如果你的表只有一个字段的话那count(*)就是最快的

count(*) 跟 count(1) 的结果一样,都包括对NULL的统计,而count(column) 是不包括NULL的统计

技术交流请关注“大数据java架构师”

mysql语句优化(mysql数据库中,数据量很大的表,有什么优化方案么)

本文编辑:admin

更多文章:


nailed(nail 什么意思)

nailed(nail 什么意思)

本文目录nail 什么意思nailed it 在俚语里 是搞定了 的意思吗 请从文化上讲解一下为什呢这么说谢谢nailed it 在俚语里 是搞定了 的意思吗nail什么意思足球解说中nail还是什么单词,是什么意思nail 什么意思n.钉

2025年2月11日 11:40

js中时钟特效代码(js Canvas实现的日历时钟案例有哪些)

js中时钟特效代码(js Canvas实现的日历时钟案例有哪些)

本文目录js Canvas实现的日历时钟案例有哪些JS简单时钟的小白问题用JavaScript编写一个动态实时显示的数字时钟代码谁能解释下JS实现的时钟功能代码的意义吗万分感谢!javascript动态显示时间用JS实现钟表计时器功能求Ja

2025年2月19日 08:30

impala雪佛兰(雪佛兰英帕拉是几几年生产的)

impala雪佛兰(雪佛兰英帕拉是几几年生产的)

本文目录雪佛兰英帕拉是几几年生产的雪弗莱impala价钱雪佛兰IMPALA的简介雪佛兰impala叫什么名字Impala是什么车雪佛兰英帕拉是几几年生产的  作为通用汽车公司雪佛兰旗下的著名车型,英帕拉诞生于1958年,当时他是一种装备大扭

2025年2月24日 20:40

bmp文件格式详解(什么是BMP格式呀)

bmp文件格式详解(什么是BMP格式呀)

本文目录什么是BMP格式呀bmp是什么格式bmp文件格式怎么打开BMP是什么文件格式,如何打开BMP文件BMP的格式是什么bmp是什么文件格式BMP是什么文件bmp是什么图像文件格式什么是BMP格式呀bmp是位图格式,是windows使用的

2025年3月23日 22:20

c语言标识符有哪些(C语言的32个标识符是那32 个啊有专业人士能列举全部吗)

c语言标识符有哪些(C语言的32个标识符是那32 个啊有专业人士能列举全部吗)

本文目录C语言的32个标识符是那32 个啊有专业人士能列举全部吗C语言中类型标识符有哪些C语言的32个标识符是那32 个啊有专业人士能列举全部吗你的说法不对,应该指的是具有特定意义的标识符吧,也就是关键字(保留字)如下:auto,break

2025年2月13日 02:20

php零基础视频教程(php前端和后端如何零基础学习)

php零基础视频教程(php前端和后端如何零基础学习)

本文目录php前端和后端如何零基础学习零基础如何自学PHP,最终达到求职水平php前端和后端如何零基础学习首先来说,现在的前端越来越偏后端化了。以前的前端更多的就是排排版、切切图、改个特效,而当下的前端逐渐后端化了,如服务端渲染等,也有了“

2025年2月22日 00:30

二建报名时间2020官网(什么时候能报考二建)

二建报名时间2020官网(什么时候能报考二建)

本文目录什么时候能报考二建2020全国二建考试时间是什么时候一年考几次什么时候能报考二建函授大专毕业,只有毕业证下来就可以报考二建。二级建造师报考条件是中专及以上学历工程类或工程经济类专业从事相关专业2年以上。一般从事年限就是按照毕业时间开

2025年3月26日 18:30

ip地址dhcp是什么意思(手机上ip设置里的dhcp是什么)

ip地址dhcp是什么意思(手机上ip设置里的dhcp是什么)

本文目录手机上ip设置里的dhcp是什么ip地址类型通过DHCP指派是什么意思手机上ip设置里的dhcp是什么DHCP就是动态获取IP。另外还有静态,就是需要手动输入IP地址和DNS之类的信息。这俩个有个前提就是路由器上是怎么设置的,如果路

2025年3月15日 12:40

argumentation和argument的区别(编程中argument什么意思一定要准确..)

argumentation和argument的区别(编程中argument什么意思一定要准确..)

本文目录编程中argument什么意思一定要准确..argumentation 和argument有什么区别编程中argument什么意思一定要准确..argument 和parameter 一样,都是函数的参数。parameter是指函

2025年2月21日 06:00

软件测试是干什么的?软件测试是什么

软件测试是干什么的?软件测试是什么

本文目录软件测试是干什么的软件测试是什么软件测试的基本方法和流程软件测试有哪些种类黑马程序员有软件测试的班级吗想要软件测试培训视频,谁有松勤软件测试零基础就业课程/自动化测试课程视频教程软件测试的历史和发展高级软件测试工程师和初级软件测试工

2025年3月11日 09:00

administratively(administration是什么意思)

administratively(administration是什么意思)

本文目录administration是什么意思administratively-prohibited是什么意思difficult所有形式是什么int vlan 1 administratively down是什么意思administrati

2025年2月24日 10:40

miui系统(miui优点)

miui系统(miui优点)

本文目录miui优点MIUI是什么系统为什么都说miui好用miui系统更新叫什么miui优点MIUI是一个基于CyanogenMod而深度定制的Android流动操作系统,它大幅修改了Android本地的用户接口并移除了其应用程序列表(A

2025年3月17日 20:10

python range(python相对于range应该更倾向于实用xrange吗)

python range(python相对于range应该更倾向于实用xrange吗)

本文目录python相对于range应该更倾向于实用xrange吗python,使用range语句产生0到1之间的10个数Python由大到小输出列表中的元素(不用函数,用逻辑for之类的)python相对于range应该更倾向于实用xra

2025年2月23日 03:00

点击查看源网页(win7系统查看网页源文件的三种方法)

点击查看源网页(win7系统查看网页源文件的三种方法)

本文目录win7系统查看网页源文件的三种方法怎么查看网页的源文件win7系统查看网页源文件的三种方法解决方法1:1、打开一个网页之后,右键---》查看源文件(IE10 为查看源),然后就会弹出网页的源文件;2、点击之后就会出现一个文本样式的

2025年3月28日 06:00

计算机专业主要学什么?计算机学哪个专业好

计算机专业主要学什么?计算机学哪个专业好

本文目录计算机专业主要学什么计算机学哪个专业好电脑学什么专业好学计算机学什么专业好大学学计算机的准大一生如何利用暑假掌握一些相关的基础知识零基础怎么开始学计算机大一新生如何自学计算机0基础想自学计算机,应该从何开始自学计算机该先从什么开始学

2025年2月22日 11:50

inquiry和enquiry(英语inquire和enquire区别是什么)

inquiry和enquiry(英语inquire和enquire区别是什么)

本文目录英语inquire和enquire区别是什么enquiry和inquiry的区别enquiry和inquiry都有询盘的意思,那在用的时候到底有什么区别呢英语inquire和enquire区别是什么inquire和enquire的区

2025年3月9日 17:40

二叉树的遍历(二叉树的遍历是怎么回事)

二叉树的遍历(二叉树的遍历是怎么回事)

本文目录二叉树的遍历是怎么回事如何实现二叉树的遍历何谓二叉树的遍历怎么正确理解二叉树的遍历什么叫二叉树前序遍历,中序遍历,后序遍历二叉树的前序中序后序遍历访问顺序是怎么回事啊搞不懂写出二叉树的先序遍历、中序遍历、后序遍历二叉树先序遍历,中序

2025年2月9日 22:50

mysql数据库迁移(如何将mysql数据库复制到另一台服务器)

mysql数据库迁移(如何将mysql数据库复制到另一台服务器)

本文目录如何将mysql数据库复制到另一台服务器如何复制MySQL数据库或表到另外一台服务器如何将MySQL数据迁移到SQLServer中如何将mysql数据库复制到另一台服务器将原机器上的mysql/data下的你的数据库目录整个拷贝下来

2025年3月30日 18:50

div css在线(div+css是什么)

div css在线(div+css是什么)

本文目录div+css是什么DIV +css 高度自适应问题,在线求各位大虾解答!怎么用div布局加css样式做网页css 怎么实现 div水平居中 呢高手们进来帮帮忙吧,在线等!!用div+css写如何用DIV+CSS进行网页样式布局在线

2025年2月15日 02:50

jsonobject依赖(什么时候用jsonobject jsonarray.fromobject)

jsonobject依赖(什么时候用jsonobject jsonarray.fromobject)

本文目录什么时候用jsonobject jsonarray.fromobjectjsonobject怎么获取json中某个值jmeter 解析json时,报错JSONObject not found in namespacemaven对于j

2025年2月23日 20:20

近期文章

本站热文

harbor,port,pier的区别?谁能解释“harbour“(港口)与“pier“(码头)的区别
2025-02-22 17:40:03 浏览:18
ibatis foreach(ibatis 批量update操作)
2025-02-10 23:40:06 浏览:7
endless rain(endless rain表达什么情感)
2025-02-14 06:00:02 浏览:6
标签列表

热门搜索