千万级数据
发布网友
发布时间:2022-04-13 02:50
我来回答
共3个回答
懂视网
时间:2022-04-13 07:12
一、架构设计11、主从服务器可以使用不同的存储引擎。Master上使用InnoDB,利用事务、行级锁等高级特性,Slave上使用MyISAM,读性能更好,节省内存,容易备份。还可以分别使用不同的数据类型,例如Master上用varchar,Slave用char,不仅节省空间,还可以利用MyISAM的静态表特性。2、M-S-Muti Slave方案中,中继Slave还可以使用BlackHole存储引擎。BlackHole存储引擎只记录日志,不写数据。利用这个特点可以让中继日志性能提升很多。但是,这种方案不支持GTIDs迷失下的Replication,因为BlackHole只能搭配StateMent格式的二进制日志,Row和Mixed格式都不可用。3、在读写分离的设计中,主从服务器可以采用不同的索引方案。Master可以只保留主键或唯一索引等保证数据关系的索引。而Salve针对查询做索引优化。
1. 推荐10款MyISAM源码实例(收藏)
简介:一、架构设计11、主从服务器可以使用不同的存储引擎。Master上使用InnoDB,利用事务、行级锁等高级特性,Slave上使用MyISAM,读性能更好,节省内存,容易备份。还可以分别使用不同的数据类型,例如Master上用varchar,Slave用char,不仅节省空间,还可以利用MyISAM的静态表特性。2、M-S-Muti Slave方案中,中继Slave还可以使用BlackHole存储引...
2. 浅谈 两种架构 核心架构设计
简介:一、架构设计11、主从服务器可以使用不同的存储引擎。Master上使用InnoDB,利用事务、行级锁等高级特性,Slave上使用MyISAM,读性能更好,节省内存,容易备份。还可以分别使用不同的数据类型,例如Master上用varchar,Slave用char,不仅节省空间,还可以利用MyISAM的静态表特性。2、M-S-Muti Slave方案中,中继Slave还可以使用BlackHole存储引...
3. 关于优化数据库的10篇文章推荐
简介:这篇文章主要介绍了MySQL实现批量插入以优化性能的教程,文中给出了运行时间来表示性能优化后的对比,需要的朋友可以参考下对于一些数据量较大的系统,数据库面临的问题除了查询效率低下,还有就是数据入库时间长。特别像报表系统,每天花费在数据导入上的时间可能会长达几个小时或十几个小时之久。因此,优化数据库插入性能是很有意义的。经过对MySQL innodb的一些性能测试,发现一些可以提高insert效率的...
4. INNODB如何使用?INNODB使用方法总结
简介:这篇文章主要介绍了MySQL实现批量插入以优化性能的教程,文中给出了运行时间来表示性能优化后的对比,需要的朋友可以参考下对于一些数据量较大的系统,数据库面临的问题除了查询效率低下,还有就是数据入库时间长。特别像报表系统,每天花费在数据导入上的时间可能会长达几个小时或十几个小时之久。因此,优化数据库插入性能是很有意义的。经过对MySQL innodb的一些性能测试,发现一些可以提高insert效率的...
5. 关于优化性能的10篇文章推荐
简介:这篇文章主要介绍了MySQL实现批量插入以优化性能的教程,文中给出了运行时间来表示性能优化后的对比,需要的朋友可以参考下对于一些数据量较大的系统,数据库面临的问题除了查询效率低下,还有就是数据入库时间长。特别像报表系统,每天花费在数据导入上的时间可能会长达几个小时或十几个小时之久。因此,优化数据库插入性能是很有意义的。经过对MySQL innodb的一些性能测试,发现一些可以提高insert效率的...
6. 关于InnoDB型数据库优化的实例详解
简介:InnoDB是为Mysql处理巨大数据量时的最大性能设计。它的CPU效率可能是任何其它基于磁盘的关系数据库引擎所不能匹敌的。在数据量大的网站或是应用中Innodb是倍受青睐的。那么它就不需要优化了吗,答案很显然:当然不是!!!
7. 实例详解innodb_autoinc_lock_mode方法
简介:下面小编就为大家带来一篇关于MySQL innodb_autoinc_lock_mode介绍。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
8. 实例详解mysql中innodb_flush_method方法
简介:下面小编就为大家带来一篇innodb_flush_method取值方法(实例讲解)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
【相关问答推荐】:
innodb - 如何实现mysql线程安全的nextval()方法
Mysql的InnoDB引擎中MVCC在实际操作中有关update的问题?
请问mysql innodb的非自增ID主键的效率?
php - 我想测试InnoDB的行锁怎么测试不了呢?帮忙看下我的代码没错吧?
php - Select多行SQL语句慢查询优化
热心网友
时间:2022-04-13 04:20
数据库吧,你用什么数据库
mysql可以配合lucene做搜索引擎,还不够大可以用cluster.一般你用like没问题,索引要做得好。
如果大家有异议,可以在后面补充。我会随时更新的。
现在大概列出如下:(望各位补充)
1.数据库的设计
尽量把数据库设计的更小的占磁盘空间.
1).尽可能使用更小的整数类型.(mediumint就比int更合适).
2).尽可能的定义字段为not null,除非这个字段需要null.(这个规则只适合字段为KEY的情形)
3).如果没有用到变长字段的话比如varchar,那就采用固定大小的纪录格式比如char.(CHAR 总是比VARCHR快)
4).表的主索引应该尽可能的短.这样的话每条纪录都有名字标志且更高效.
5).只创建确实需要的索引。索引有利于检索记录,但是不利于快速保存记录。如果总是要在表的组合字段上做搜索,那么就在这些字段上创建索引。索引的第一部分必须是最常使用的字段.如果总是需要用到很多字段,首先就应该多复制这些字段,使索引更好的压缩。
(这条只适合MYISAM引擎的表,对于INNODB则在保存记录的时候关系不大,因为INNODB是以事务为基础的,如果想快速保存记录的话,特别是大批量的导入记录的时候)
6).所有数据都得在保存到数据库前进行处理。
7).所有字段都得有默认值。
8).在某些情况下,把一个频繁扫描的表分成两个速度会快好多。在对动态格式表扫描以取得相关记录时,它可能使用更小的静态格式表的情况下更是如此。
(具体的表现为:MYISAM表的MERGE类型,以及MYISAM和INNODB通用的分区,详情见手册)
9).不会用到外键约束的地方尽量不要使用外键。
2.系统的用途
1).及时的关闭对MYSQL的连接。
2).explain 复杂的SQL语句。(这样能确定你的SELECT 语句怎么优化最佳)
3).如果两个关联表要做比较话,做比较的字段必须类型和长度都一致.(在数据庞大的时候建立INDEX)
4).LIMIT语句尽量要跟order by或者 distinct.这样可以避免做一次full table scan.
5).如果想要清空表的所有纪录,建议用truncate table tablename而不是delete from tablename.
不过有一个问题,truncate 不会在事务处理中回滚。因为她要调用create table 语句。
(Truncate Table 语句先删除表然后再重建,这个是属于文件界别的,所以自然快N多)
实测例子:
song2为INNODB表。
mysql> select count(1) from song2;
+----------+
| count(1) |
+----------+
| 500000 |
+----------+
1 row in set (0.91 sec)
mysql> delete from song2;
Query OK, 500000 rows affected (15.70 sec)
mysql> truncate table song2;
Query OK, 502238 rows affected (0.17 sec)
mysql>
{
这一点手册上有详细解释:
13.2.9. TRUNCATE语法
TRUNCATE [TABLE] tbl_name
TRUNCATE TABLE用于完全清空一个表。从逻辑上说,该语句与用于删除所有行的DELETE语句等同,但是在有些情况下,两者在使用上有所不同。
对于InnoDB表,如果有需要引用表的外键*,则TRUNCATE TABLE被映射到DELETE上;否则使用快速删减(取消和重新创建表)。使用TRUNCATE TABLE重新设置AUTO_INCREMENT计数器,设置时不考虑是否有外键*。
对于其它存储引擎,在MySQL 5.1中,TRUNCATE TABLE与DELETE FROM有以下几处不同:
· 删减操作会取消并重新创建表,这比一行一行的删除行要快很多。
· 删减操作不能保证对事务是安全的;在进行事务处理和表锁定的过程中尝试进行删减,会发生错误。
· 被删除的行的数目没有被返回。
· 只要表定义文件tbl_name.frm是合法的,则可以使用TRUNCATE TABLE把表重新创建为一个空表,即使数据或索引文件已经被破坏。
· 表管理程序不记得最后被使用的AUTO_INCREMENT值,但是会从头开始计数。即使对于MyISAM和InnoDB也是如此。MyISAM和InnoDB通常不再次使用序列值。
· 当被用于带分区的表时,TRUNCATE TABLE会保留分区;即,数据和索引文件被取消并重新创建,同时分区定义(.par)文件不受影响。
TRUNCATE TABLE是在MySQL中采用的一个Oracle SQL扩展。
}
6).能使用STORE PROCEDURE 或者 USER FUNCTION的时候.(ROUTINE总是减少了服务器端的开销)
7).在一条insert语句中采用多重纪录插入格式.而且使用load data infile来导入大量数据,这比单纯的indert快好多.(在MYSQL中具体表现为:INSERT INTO TABLEQ VALUES (),(),...();)
(还有就是在MYISAM表中插入大量记录的时候先禁用到KEYS后面再建立KEYS,具体表现语句:
ALTER TABLE TABLE1 DISABLE KEYS;ALTER TABLE TABLE1 ENABLE KEYS;
而对于INNNODB 表在插入前先 set autocommit=0;完了后:set autocommit=1;这样效率比较高。)
8).经常OPTIMIZE TABLE 来整理碎片.
9).还有就是date 类型的数据如果频繁要做比较的话尽量保存在unsigned int 类型比较快。
3.系统的瓶颈
1).磁盘搜索.
并行搜索,把数据分开存放到多个磁盘中,这样能加快搜索时间.
2).磁盘读写(IO)
可以从多个媒介中并行的读取数据。
3).CPU周期
数据存放在主内存中.这样就得增加CPU的个数来处理这些数据。
4).内存带宽
当CPU要将更多的数据存放到CPU的缓存中来的话,内存的带宽就成了瓶颈.
====
Another article more about tuning details:
http://www.informit.com/articles/article.aspx?p=29406&seqNum=1
http://blog.chinaunix.net/u/29134/showart_264480.html
热心网友
时间:2022-04-13 05:38
MARK
参考资料:四罐菠菜的脑袋