如何解决关于更好地优化数据库设计的2个问题
| 1)在mysql引擎中,MyISAM是Better还是InnoDB? 2)我想编程一个cms,它可以添加具有多个类别的帖子 我如何设计我的数据库以通过几次查询获得更好的性能? 在php中如何列出帖子的类别,例如= 1? 谢谢解决方法
1)如果需要在数据库级别使用外键关系,请使用InnoDB,否则请使用MyISAM
2)您可以使用以下架构将所有类别存储在一个表中
create table categories (
Category_ID int NOT NULL,ParentCategory_ID int NOT NULL default 0,CategoryName varchar(150)
);
使用Category_ID主键
3)
$sql = select * from posts where category_id = 1;
mysql_query($sql);
编辑:发布表的架构(示例)
create table posts (
Post_ID int NOT NULL,Category_IDs varchar(50) NOT NULL,POSTDescription varchar(1000),POSTTime int NOT NULL
)
Post_ID
是posts
表的主键。
注意,如果您的帖子属于类别1,2和3,请注意Category_ID现在是value5ѭ中类别的存储值,如1,2,3
。并且要删除属于类别1的所有帖子,您将运行以下查询
$sql = DELETE
FROM `posts`
WHERE FIND_IN_SET( \'1\',`Category_IDs` ) >0;
,没有确切的答案,因为这取决于您的要求,但是很多人已经提到了以下内容:
innodb具有行级锁定与myisam表锁定,因此innodb可以处理更多并发请求。
innodb是事务性的,因此插入通常比myisam慢
innodb是适当的RDBMS引擎,因此支持参照完整性(事务ACID bla bla bla)
innodb比myisam更可靠
myisam的读取速度比innodb更快(神话)
myisam表的占用空间比innodb的占用空间小(神话)
但是,没有多少人会提到innodb集群主键索引,因此,设计良好的innodb表将如何轻松地执行等效的myisam表。
这是两个解释聚簇索引的链接:
http://dev.mysql.com/doc/refman/5.0/en/innodb-index-types.html
http://www.xaprb.com/blog/2006/07/04/how-to-exploit-mysql-index-optimizations/
另外,请查看以下示例和文章(第二个示例可能具有特殊的意义)
5亿行论坛/线程示例
MySQL和NoSQL:帮助我选择合适的一个
1.25亿行产品/类别示例
重写mysql select以减少时间并将tmp写入磁盘
1亿行实验
传递大量数据的查询的最佳MySQL设置?
Innodb,myisam,falcon基准
http://www.mysqlperformanceblog.com/2007/01/08/innodb-vs-myisam-vs-falcon-benchmarks-part-1/
希望这可以帮助 :)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。