首先創建數據表:
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);