用户
 找回密码
 入住 CI 中国社区
搜索
楼主: ecpt
收起左侧

[数据库] ci对于百万级的数据库查询效率怎么样?

  [复制链接]
发表于 2009-11-12 21:23:10 | 显示全部楼层
把日志忘了,刚才查看了下日志,11G,全部清除了,服务器响应时间长指的是什么?网速慢?服务器反应慢?还是网速+服务器的速度一起算进来了?网站打开慢和服务器硬盘的I/O速度也有很大关系么?数据库的I/O速度测试有没有什么简单的命令?
ecpt 发表于 2009-11-11 12:04


日志跟数据库的数据量有何关系?

删的是Web Server的日志还是数据库的日志?

把日志删去能快了吗?

日志是append上去的,除了开关文件、即起动及停止外,日志大小与系统表现没有多大关系。

Web Server daemon要用CPU,Database Server daemon亦要用CPU,网路要花时间,I/O亦要花时间。没有分析,如何得知谁是凶手?没有收集表现数据,资源使用率,如何进行分析?

要单独测试网路速度或I/O速度并不困难,但要测试什么状况下的服务器?忙时?闲时?没有表现数据及资源使用率,谁知道何时忙?何时闲?

数据量大,记录多了后,肯定会有影响的, 如果不能解决的话,怕只有用 master-slave,或者采用缓存机制了 ...
拾荒者 发表于 2009-11-11 16:48


这不正是对应不同层次的解决方案?



老实说,经过二十个讨论后,连服务器的操作系统、用什么数据库都不知道便跑出这么多建议,建议是基于什么的?
发表于 2009-11-25 17:47:31 | 显示全部楼层
:):):):):):)
发表于 2010-1-4 22:57:45 | 显示全部楼层
百万级数据不至于吧?
设计好数据库的索引,优化查询语句
不常更新的数据查询出来缓存到内存或文件里面
再加上页面缓存.
建议你打开profiler,看问题在哪里.
发表于 2010-1-21 16:57:18 | 显示全部楼层
以前看到过的一个帖子  SQL优化
放在这大家 研究下

在我们使用查询语句的时候,经常要返回前几条或者中间某几行数据,这个时候怎么办呢?不用担心,mysql已经为我们提供了这样一个功能。
MYSQL的优化是非常重要的。其他最常用也最需要优化的就是limit。mysql的limit给分页带来了极大的方便,但数据量一大的时候,limit的性能就急剧下降。

同样是取10条数据

select * from yanxue8_visit limit 10000,10 和
select * from yanxue8_visit limit 0,10
就不是一个数量级别的。

网上也很多关于limit的五条优化准则,都是翻译自mysql手册,虽然正确但不实用。今天发现一篇文章写了些关于limit优化的,很不错。

文中不是直接使用limit,而是首先获取到offset的id然后直接使用limit size来获取数据。根据他的数据,明显要好于直接使用limit。这里我具体使用数据分两种情况进行测试。(测试环境win2033 p4双核 (3GHZ) 4G内存 mysql 5.0.19)

1、offset比较小的时候。

select * from yanxue8_visit limit 10,10

多次运行,时间保持在0.0004-0.0005之间
Select * From yanxue8_visit Where vid >=(
Select vid From yanxue8_visit Order By vid limit 10,1
) limit 10

多次运行,时间保持在0.0005-0.0006之间,主要是0.0006
结论:偏移offset较小的时候,直接使用limit较优。这个显然是子查询的原因。

2、offset大的时候。
select * from yanxue8_visit limit 10000,10

多次运行,时间保持在0.0187左右
Select * From yanxue8_visit Where vid >=(
Select vid From yanxue8_visit Order By vid limit 10000,1
) limit 10

多次运行,时间保持在0.0061左右,只有前者的1/3。可以预计offset越大,后者越优。

以后要注意改正自己的limit语句,优化一下mysql了
发表于 2010-1-31 14:41:23 | 显示全部楼层
可以考虑数据缓存,再查查慢查询
发表于 2010-2-25 13:46:00 | 显示全部楼层
CI 基本不存在大的问题 别用active record 的方式...
Mysql对于百万级数据应该没有问题..
可能你程序里有select count(*) from 之类的语句 不要执行全表扫描... 如果要分页参考豆瓣的分页方式

多检查你的sql语句
发表于 2010-3-20 16:48:03 | 显示全部楼层
豆瓣的分页方式 好在哪?
发表于 2010-8-18 12:05:05 | 显示全部楼层
memached等缓存  优化sql
发表于 2010-8-18 12:25:57 | 显示全部楼层
关于查询数据库的效率问题,我说说我的体会
1,查义数据库的快慢,不单是MYSQL的结构是否合理,还要看你的程序结构或是算法是否合理,这点很重要!些些时间,就算你的数据库规化得再好,程序一片臃肿,那也白搭
2 综合考虑,运用合理的策略,比如,以空间换速度的方式,即,能使用缓存的就用缓存,这点在提升效率上也有很大帮助
3,让我好好再想想,哈哈
发表于 2010-8-21 12:41:02 | 显示全部楼层
嫌慢就用nosql吧,上亿级别仍然是瞬间存取

本版积分规则