我有一个 MySQL 问题。我必须优化我网站上的一些查询。其中一个我已经完成了,但仍有一些没有你的帮助我无法解决。
我有一个名为“新闻”的表:
CREATE TABLE IF NOT EXISTS `news` (
`id` int(10) NOT NULL auto_increment,
`edited` smallint(1) NOT NULL default '0',
`site` varchar(30) default NULL,
`foreign_id` varchar(25) default NULL,
`title` varchar(255) NOT NULL,
`text` text NOT NULL,
`image` varchar(255) default NULL,
`horizontal` smallint(1) NOT NULL,
`image_author` varchar(255) default NULL,
`text_author` varchar(255) default NULL,
`lang` varchar(3) NOT NULL,
`link` varchar(255) NOT NULL,
`date` date NOT NULL,
`redirect` smallint(1) NOT NULL,
`parent` int(10) NOT NULL,
`views` int(5) NOT NULL,
`status` smallint(1) NOT NULL,
PRIMARY KEY (`id`),
KEY `lang` (`lang`,`status`),
KEY `date` (`date`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=47122 ;
如您所见,我有两个索引:“lang”和“date”
我尝试了一些不同索引的组合,这个组合给我带来了最好的结果……不幸的是,只在我的本地计算机上。在服务器上我仍然有不好的结果。我想说数据库是一样的。
询问:
SELECT id FROM news WHERE lang = 'en' AND STATUS =1 ORDER BY DATE DESC LIMIT 0, 10
本地主机解释:
+----+-------------+--------+-------+-------------- -+--------+---------+------+------+-------------+ | 编号 | 选择类型 | 表| 类型 | 可能的键 | 关键 | key_len | 参考 | 行 | 额外 | +----+-------------+--------+-------+-------------- -+--------+---------+------+------+-------------+ | 1 | 简单 | 新闻 | 索引 | 朗 | 日期 | 3 | 空 | 23 | 使用位置 | +----+-------------+--------+-------+-------------- -+--------+---------+------+------+-------------+
服务器说明:
+----+-------------+--------+------+--------------- +--------+---------+-------------+--------+-------- ---------------------+ | 编号 | 选择类型 | 表| 类型 | 可能的键 | 关键 | key_len | 参考 | 行 | 额外 | +----+-------------+--------+------+--------------- +--------+---------+-------------+--------+-------- ---------------------+ | 1 | 简单 | 新闻 | 参考 | 状态 | 状态 | 13 | 常量,常量 | 15840 | 使用哪里;使用文件排序 | +----+-------------+--------+------+--------------- +--------+---------+-------------+--------+-------- ---------------------+
我看过很多其他类似的主题,但不幸的是我找不到在我的服务器上工作的任何解决方案。我很高兴为您提供一些解决方案和一些解释,以便我可以优化我的其他查询。
谢谢 !