数据库--单表优化案例

首先创建数据表:

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 FROM article WHERE category_id=1 AND
comments>1 ORDER BY views 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);

在这里插入图片描述
在这里插入图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章