2013-06-23 73 views
0

我有一个MySQL问题。我必须优化我的网站上的一些查询。其中一个我已经做了,但还有一些我没有你的帮助就无法解决。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 ; 

,你可以看到我有两个指标:“郎”和“日期”

我已经尝试了不同的指标,这个的一些组合一个产生了我最好的结果......不幸的是只在我的本地计算机上。在服务器上,我仍然有不好的结果。我想说的是数据库是一样的。

查询:

SELECT id FROM news WHERE lang = 'en' AND STATUS =1 ORDER BY DATE DESC LIMIT 0, 10 

本地主机解释:

 
+----+-------------+-------+-------+---------------+------+---------+------+------+-------------+ 
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | 
+----+-------------+-------+-------+---------------+------+---------+------+------+-------------+ 
| 1 | SIMPLE  | news | index | lang   | date |  3 | NULL | 23 | Using where | 
+----+-------------+-------+-------+---------------+------+---------+------+------+-------------+ 

服务器解释:

 
+----+-------------+-------+------+---------------+--------+---------+-------------+-------+-----------------------------+ 
| id | select_type | table | type | possible_keys | key | key_len |  ref  | rows |   Extra   | 
+----+-------------+-------+------+---------------+--------+---------+-------------+-------+-----------------------------+ 
| 1 | SIMPLE  | news | ref | status  | status |  13 | const,const | 15840 | Using where; Using filesort | 
+----+-------------+-------+------+---------------+--------+---------+-------------+-------+-----------------------------+ 

我已经看过了很多其他类似的话题,但不幸的是我无法找到任何解决方案在我的服务器上工作。我会很高兴在这里从你这里解释一些解释,所以我可以优化我的其他查询。

谢谢!

回答

1

这是您的查询:

SELECT id 
FROM news 
WHERE lang = 'en' AND STATUS =1 
ORDER BY DATE DESC 
LIMIT 0, 10 

最好的指数是一个包含在查询中使用的所有字段(在所有四个字段)。索引中的排序顺序为where子句中的相等条件,后面跟着order by子句,然后是select子句中的其他列。

所以,试试这个索引:ndws(leng, status, date, id)

+0

由于戈登,结果现在是以下几种:1个\t \t SIMPLE新闻\t \t参考状态\t \t状态13 \t常量,常量\t \t 15020使用其中;使用索引。行也很多,但现在正在使用where和index。这更好,对吧? –

+0

@VeskoGeorgiev。 。 。是的,我认为这样更好。它跑得快吗? –

+0

我无法确定它是否更快,但页面变得非常频繁,并导致大量的处理器时间,因为我共享了托管。所以我希望这会减少那个时间。 :) –