2 question about better optimize database design
1) 在 mysql 引擎中,MyISAM 更好还是 InnoDB 更好?
2) 我想编写一个可以添加多类别帖子的 cms
我必须如何设计我的数据库以通过一些查询获得更好的性能?
在php中如何列出例如哪个类别= 1的帖子?
谢谢你
没有确定的答案,因为这取决于您的要求,但是很多人已经提到了诸如:
- 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写入磁盘
-
亿行实验
对于提供大量数据的查询的最佳 MySQL 设置?
-
Innodb vs. myisam vs. falcon 基准测试
http://www.mysqlperformanceblog.com/2007/01/08/innodb-vs-myisam-vs-falcon-benchmarks-part-1/
希望这会有所帮助:)
1) 如果你需要 DB 级别的外键关系,请使用 InnoDB,否则使用 MyISAM
2) 您可以将所有类别存储在一个具有类似
架构的表中
1 2 3 4 5 | create table categories ( Category_ID int NOT NULL, ParentCategory_ID int NOT NULL default 0, CategoryName varchar(150) ); |
具有 Category_ID 主键
3)
1 2 |
edit : post 表的模式(示例)
1 2 3 4 5 6 | create table posts ( Post_ID int NOT NULL, Category_IDs varchar(50) NOT NULL, POSTDescription varchar(1000), POSTTime int NOT NULL ) |
注意 Category_IDs 现在是
2
3
FROM `posts`
WHERE FIND_IN_SET( '1', `Category_IDs` ) >0;