大家好,今天小编关注到一个比较有意思的话题,就是关于国际语音通话时间限制表:“电话带宽,人情两难全?”的问题,于是小编就整理了1个相关介绍国际语音通话时间限制表:“电话带宽,人情两难全?”的解答,让我们一起看看吧。
SQL数据库如何优化?
之前在BAT里参与过一个公司级应用(非市场级,投入的人力也不会那么大),上线2年后,总是被用户投诉,原因是这个应用使用MySql数据库来做持久层,但是2年了,有一张非常重要的存储历史任务的表实在是太大了,导致通过页面想要查询历史数据的速度变得非常非常慢,所以用户很是不满意。
分析下来,这不是用Redis能解决的缓存问题,而是历史数据的查询响应速度问题。
我们最开始是希望能够通过增加索引的方式解决,但是面对千万级别的数据量,我们也不敢贸然加索引,因为一旦数据库hang住,期间的所有数据库写入请求都会被放到等待队列中,如果请求是通过***请求发过来的,很有可能导致服务发生分钟级别的超时不响应。
虽然经常被用户投诉反应慢,也不能破罐破摔,直接超时不响应了吧。
于是我们陷入了两难的境地。
后来我们分了两个部分来优化持久层。
第一步就是配置MySQL的主从库,通过将读写请求分离,来提高数据库的响应速度。
从上图可知,来自同一台服务器的请求,经过MySQL-proxy被分流给了不同的MySQL节点,其中写请求给了主节点,读请求给了从节点。因此,我们首先通过分流的方式,减轻了单节点MySQL的响应压力,实现了优化的第一步。
但是,只配置MySQL的主从是远远不够的。
面试的时候经常会文档一些SQL方面的问题,比较常见的面试题例如“什么时候回造成索引失效?”,又或者“你经常做的SQL优化的工作有哪些?”
下面,我就介绍几个有关SQL优化的知识点。
负向条件查询不能使用索引:包括!=、not in、not exists都尽量不要使用;
%在前面的模糊查询:where name like '%xxx';
等号左边有函数:where upper(str) = '...',就算str字段有索引,这个写法也不会走索引;
数据区分度不大的字段,不要建索引:例如性别男、女、为止,这种就不适合建立索引;
隐式转换:where tel = 13800000000,如果tel字段是varchar类型,这个写法不会报错,但是会索引失效;
只返回需要的数据:select name,gender from users 优于 select * from users;
到此,以上就是小编对于国际语音通话时间限制表:“电话带宽,人情两难全?”的问题就介绍到这了,希望介绍关于国际语音通话时间限制表:“电话带宽,人情两难全?”的1点解答对大家有用。