
MySQL 对于千万级的大表的优化:
常用的优化sql----突出快字,使完成 *** 作的时间最短
1、用索引提高效率:
3、使用DECODE函数可以避免重复扫描相同记录或重复连接相同的表;
4、删除重复记;
5、过内部函数提高SQL效率;
......
读写分离----- *** 作不在一个表里完成
1、主数据库A,进行事务性增、改、删 *** 作(INSERT、UPDATE、DELETE);
2、从数据库B,进行SELECT查询 *** 作;
3、A复制到B,使数据保持一致性;
垂直划分 ------数据不存储在一个服务器里
按照功能划分,把数据分别放到不同的数据库和服务器。如博客功能的放到服务器A,储存文件放到服务器B;
水平划分------相同数据结构的数据不放在一张表里
把一个表的数据根据一定的规则划分到不同的数据库,两个数据库的表结构一样。
数据归档处理-----时间优先原则存储读取
将数据库中不经常使用的数据迁移至近线设备,将长期不使用的数据迁移至文件形式归档。这样,随着应用的需要,数据会在在线、近线和文件文档之间移动,如当应用需要访问很久以前的某些数据,它们的物理位置在近线设备,则会自动移动到在线设备。对用户的应用而言,这些都是透明的,就像所有数据都存放在在线设备一样,不会对数据库应用产生任何影响。
一、使用LOAD DATA INFILE从文本下载数据这将比使用插入语句快20倍。二、使用多个值表的 INSERT 语句 ,可以大大缩减客户端与数据库之间的连接、语法分析等消耗,使得效率比分开执行的单个 INSERT 语句快很多,相关的命令我们会在 SQL 优化详细介绍。如果多值的 INSERT是往一个非空的数据表里增加记录 ,也可以通过调整 bulk_insert_buffer_size 参数来提高数据插入的效率,这个参数设置的是 bulk insert 的缓存大小,默认是 8M 。
insert本身的多个value:
INSERT INTO table (field1,field2,field3) VALUES ('a',"b","c"), ('a',"b","c"),('a',"b","c")
在my.cnf中添加如下语句,将insert语句的长度设为最大。
Max_allowed_packet=1M
Net_buffer_length=2k
查看bulk_insert_buffer_size的值。
mysql>SHOW VARIABLES
+———————————+—————————————-+
| Variable_name | Value |
+———————————+—————————————-+
| auto_increment_increment | 1 |
| auto_increment_offset | 1 |
| automatic_sp_privileges | ON |
| back_log | 50 |
| basedir | /usr/local/mysql/ |
| binlog_cache_size | 32768 |
| bulk_insert_buffer_size | 8388608 |
我google了一下大概有一下几个方法,1.复制表结构及数据到新表
CREATE TABLE 新表 SELECT * FROM 旧表
2.只复制表结构到新表
CREATE TABLE 新表 SELECT * FROM 旧表 WHERE 1=2
即:让WHERE条件不成立.
3.复制旧表的数据到新表(假设两个表结构一样)
INSERT INTO 新表 SELECT * FROM 旧表
4.复制旧表的数据到新表(假设两个表结构不一样)
INSERT INTO 新表(字段1,字段2,.......) SELECT 字段1,字段2,...... FROM 旧表
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)