2.写入数据只是存的问题,问题在于读取数据会变慢。建议使用缓存memcache,redis在向你招收哦。将用户数据存入内存,再次读取避免从数据库查找。
3.分布式,搞集群,扩大配置。
一条新闻的相关信息,来源,作者,正文,这些基本不变咯,除了正文可能文字比较多,其他的你可以存进缓存,正文的话,你这里可以把前面200字作为正文缩略,存进缓存。
你的数据库表可以定义为数字自动递增的主键,MySQL将采取照顾其独特的价值,同时插入新行。每次添加一个新行,MySQL的增量值自动,它坚持以表。但有时你可能需要重置AUTOINCREMENT列值1。说你写一个示例应用程序,你已经有几行插入表中。现在要删除这些行,并自动增量列复位,使新行插入将有主键的值1 1。
有几个方法来实现这一点。
1。直接复位自动增量值
ALTER TABLE语法提供了一种方法来重新设置自动增量列。采取看看下面的例子。
ALTER TABLE table_name AUTO_INCREMENT = 1
请注意,你不能重置计数器的值小于或等于任何已使用的。对于MyISAM,如果该值小于或等于目前在AUTO_INCREMENT列的最大值,该值是目前最大的加一复位。对于InnoDB,如果该值大于当前列中的最大值,没有出现错误和不改变当前序列值。
2。截断表截断表自动增量值自动复位为0。
TRUNCATE TABLE table_name
谨慎使用。用于截断时,任何的AUTO_INCREMENT计数器复位到零。从MySQL 5.0.13上,AUTO_INCREMENT计数器复位为零的TRUNCATE TABLE,而不管是否有一个外键约束。
一旦发射TRUNCATE是,表处理不记得过去使用的AUTO_INCREMENT值,但从头开始计数。这是真实的,甚至对于MyISAM和InnoDB,通常不重用序列值。
3。下降和重新创建表
这是另一种方式下重启自动增量指数。虽然不是很理想。
DROP TABLE table_name
所有这些技术的价值技术重置自动增量列数。使用任何适合你的要求。
这个错误是由于你用了事物,导致表的死锁。 死锁的原因很多,如果你的批量插入有依赖性的话,可能在Mysql里面形成了脏读。第一步先解决你的死锁问题,用指令show engine innodb status \G 查看是那一个查询进程锁表, 找出来ID,杀掉它。
第二步检查自己的程序的SQL语言,一般批量插入的话尽量用insert into (),(),().... 一个SQL来执行,如果需要检查是否存在然后插入或替换,如果表有唯一索引或主键,用replace, 其他格式一样。
第三步检查你的访问数据库的逻辑,在什么时候进行的commit,你在读写的时候是否设定了独占式访问方法, 或数据库中已经其他的存储过程或触发器同时在 *** 作这个表。
如果以上都无效,你最好是通过上述指令同时监控你的程序并在mysql里面用show process list查看是哪一个ID出了问题。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)