首先创建数据表:
CREATE TABLE IF NOT EXISTS article(
-> id int(10) UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT,
-> author_id INT(10) UNSIGNED NOT NULL,
-> category_id INT(10) UNSIGNED NOT NULL,
-> views INT(10) UNSIGNED NOT NULL,
-> comments INT(10)UNSIGNED NOT NULL,
-> title VARCHAR(255) NOT NULL,
-> content TEXT NOT NULL
-> );
插入数据:
INSERT INTO article
( author_id
, category_id
, views
, comments
, title
, content
) VALUES
-> (1,1,1,1,‘1’,‘1’),
-> (2,2,2,2,‘2’,‘2’),
-> (1,1,3,3,‘3’,‘3’);
结果如下:
需要优化的案例如下:
可能会得到如下SQL:
SELECT
author_id
FROMarticle
WHEREcategory_id
=1 AND
comments
>1 ORDER BYviews
DESC LIMIT 0,1 ;
结果如下:
表示可以得到想要的结果,但是我整的是SQL优化,先看看这样做的效果如何!
第一步,先用EXPLAIN查看效果。
第二步,首先解决第一个问题,为表添加索引
CREATE INDEX idx_article_ccv on article(category_id,comments,views);
第三步,再次尝试
第四步,发现这个索引不合适,删除这个索引
DROP INDEX idx_article_ccv ON article;
第五步:因为comments这索引使用到了范围,这个时候绕过它,用其他两个
CREATE INDEX idx_article_cv ON article(category_id,views);