mysql性能分析

1、笛卡尔积
内存消耗大原理上是先把两张表相乘,再从相乘的结果中筛选出来的数据。
2、连街查询
内存消耗相对于多表查询要低一些,每一条数据在查询中需要判断。

说的通俗一些,比如笛卡尔积和连接查询两个人去买显卡,没错他俩都是做显卡生意的。笛卡尔积就是先买上一批存到自己的仓库里面去。而后在一个个检查是否合格,然后倒卖。而连接查询则是去买显卡的时候先检测显卡是不是好的,如果是好的他就收货倒卖否则不收货,他没有自己的仓库,当然人家也不需要仓库。

理论上来说两者的效率不会有太大的区别,因为两个人都要一个一个的去匹配显卡。只是连接查询不需要那个仓库而已。其实在数据量非常庞大的时候两者都不是最佳的方案。因为可以想象一下,假如你进了100万个显卡。每个需要100道程序才能测试出合格与否。那这数据量就高到了一个亿。所以

当使用多表查询的时候,如果数据量不算大,那么使用连接查询效率相对较高。但是如果数据量非常庞大,那么使用子查询(如果无法使用,即使分成几个单表查询)查询效率会更高一些。
一般情况下
查询语句where条件后如果有多个条件,条件的顺序应该是?
先把能够筛选大量数据的条件放前面,其他条件放后面

而后再来介绍一下Limit
它有两个参数,srtart和length意思分别是从哪一条数据开始,查询多少条数据出来。

使用场景较多的情况是分页查询
Select * from 表 limit 0,10
Select * from 表 limit ((页码-1)*10),10
但是mysql这里有一个问题比如从第9000万条数据往后面找十条数据,那么mysql就必须数到第9000万条再往后数十个。

针对这个问题 可以加一个字段num是连续的,最大的缺点就是要求num是连续的。这里其实就相当于学集合的时候,链表和数组的效率,数组可以直接找到指定个数的数据,而链表呢必须从第一个开始数,数到指定的数据处。
Select * from 表 where num >=((页码-1)*10) limit 10;
(oracle数据库分页查询的时候就使用了子查询,没使用limit)

在写查询的时候最好不要用 *
而是写清楚要查询的有哪些字段

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值