r*****l 发帖数: 41 | 1 1. 在已经加完index的列上查询速度仍然很慢,重新建立index?
2. 用NoSQL?
3. 加Redis Cache?
4. 用MySQL replicator,对多个slaves查询?
5. 用in-memory database?
到底该怎么回答? |
r*****l 发帖数: 41 | 2 这些答案都是工作中自己摸索体会出来的,有没有更权威的答案? |
y*********e 发帖数: 518 | 3
首先explain下query,看下execution plan。看index有没有被用到。没有被用到,为
什么,改写query。有用到还是慢,index是不是corrupt了,重建index。Query返回多
少数据?返回数据量大的话,nonclustered index performance很有影响的,考虑
clustered index。table要不
要做partition?要不要把mysal server partition(比如把数据partition成100份,
存到100个不同的mysql server上,然后query做成100个mapper这样提速?)
还有,服务器CPU是不是100%了,看一下。还有,具体慢在哪里,是在数据库查询上,
还是在业务逻辑层上?看日志。需要的话profile一下。是一个服务器慢,还是多个慢
?是突然间变慢?最近有没有做release,要不要rollback?等等。。
【在 r*****l 的大作中提到】 : 1. 在已经加完index的列上查询速度仍然很慢,重新建立index? : 2. 用NoSQL? : 3. 加Redis Cache? : 4. 用MySQL replicator,对多个slaves查询? : 5. 用in-memory database? : 到底该怎么回答?
|
h******e 发帖数: 908 | 4 用limit
【在 r*****l 的大作中提到】 : 1. 在已经加完index的列上查询速度仍然很慢,重新建立index? : 2. 用NoSQL? : 3. 加Redis Cache? : 4. 用MySQL replicator,对多个slaves查询? : 5. 用in-memory database? : 到底该怎么回答?
|
r*****l 发帖数: 41 | 5 我是说存储的数据太多,而不是取出来的数据太多。
比如我要对数据库内timestamp列任意时间区间内的条数进行检索,返回的结果只有一
个int而已:
SELECT count(*) FROM table_name WHERE timestamp >= '2010-02-01 10:08:01' AND
timestamp <= '2016-02-02 10:30:30'
【在 h******e 的大作中提到】 : 用limit
|
j**********r 发帖数: 3798 | 6 好歹要有数据量,什么样的查询,什么样的SLA才能回答呀。这哪有统一答案的。
【在 r*****l 的大作中提到】 : 1. 在已经加完index的列上查询速度仍然很慢,重新建立index? : 2. 用NoSQL? : 3. 加Redis Cache? : 4. 用MySQL replicator,对多个slaves查询? : 5. 用in-memory database? : 到底该怎么回答?
|
j**********r 发帖数: 3798 | 7 对单一query优化有很多种办法,比如每年分一个数据库,维护一个全年的count。数据
量直接下一个数量级。
AND
【在 r*****l 的大作中提到】 : 我是说存储的数据太多,而不是取出来的数据太多。 : 比如我要对数据库内timestamp列任意时间区间内的条数进行检索,返回的结果只有一 : 个int而已: : SELECT count(*) FROM table_name WHERE timestamp >= '2010-02-01 10:08:01' AND : timestamp <= '2016-02-02 10:30:30'
|
w*****g 发帖数: 1415 | 8 1. 最先分析query,看看query有没有优化的空间,或则简历index
2. 预先计算某些query的结果,然后存起来。比如学生的GPA,实时算起来很费时。我
们就建立一些trigger,每次某些数据库表有变动就自动计算并保存结果到GPA表。
3. 静态化,最常见的是新闻系统和文章管理系统。每次更新新闻/文章的时候,产生一
个文本文件,在file system里面存储。用户读取的时候从文件系统读,不经过数据库
,或者只有小部分数据经过数据库。
4. mysql replica,费时的查询可以交给只读的Mysql
5. memcached/redis
6. 升级服务器硬件(很多时候这个方法最省钱省时间) |
u***n 发帖数: 21026 | |
s*****r 发帖数: 43070 | 10 常见的办法就是sharding,把大量数据分散存储
如果query需要join的,比较麻烦。一小一大,可以用hash join
大数据计算的主要目的其实就是join table |