sql – InnoDB排序真的很慢吗?
|
MySQL 4.x存在一个限制,它只允许MySQL为每个表使用一个索引.由于它使用了metaward_achiever.award_id列上的索引来进行WHERE选择,因此它不能使用metaward_achiever.modified上的索引进行排序.我希望你使用的是MySQL 5.x,这可能会改进它. 您可以通过对此简化查询进行说明来查看此内容: SELECT * FROM `metaward_achiever` WHERE `metaward_achiever`.`award_id` = 1507 ORDER BY `metaward_achiever`.`modified` DESC LIMIT 100 如果你可以使用WHERE选择和排序的索引来获得这个,那么你就可以了. 您还可以使用metaward_achiever.award_id和metaward_achiever创建复合索引.如果MySQL不使用它,那么您可以提示它或删除仅在award_id上的那个. 或者,如果您可以摆脱metaward_achiever.id并将metaward_achiever.award_id作为主键并在metaward_achiever.modified上添加一个键,或者更好的是将metaward_achiever.award_id与metaward.modified结合使用您的主键,那么您将真的好. 您可以尝试通过修改设置来优化文件排序.不幸的是,我没有这方面的经验,因为我们的DBA处理配置,但你可能想看看这个伟大的博客: 这是一篇关于filesort的文章: (编辑:天瑞地安资讯网_黄海网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- sql-server – SQL Server如何确定缺失索引请求中的键列顺序
- 访问最新记录时SQL性能变慢
- sql – 查找值并显示找到的值的数据库,表,列,主键
- sql-server-2005 – 如何在SQL Server 2005中撤消删除操作?
- sql-server – 如何防止Sql Server作业同时运行
- sql-server – 使用DISTINCT作为子查询中的提示有用吗?
- .net – 针对数据库表实现具有多个可选参数的搜索功能
- sql-update – 从另一个表更新多个列 – 需要Oracle格式
- SqlDateTime溢出是什么原因?如何解决?
- 用于搜索具有无限数量的位字段的表的SQL设计方法


