MYSQL索引例項

2021-04-19 03:27:07 字數 1147 閱讀 9711

mysql描述:

乙個文章庫,裡面有兩個表:category和article。category裡面有10條分類資料。article 裡面有20萬條。article裡面有乙個"article_category"欄位是與category裡的"category_id"字段相對應的。 article表裡面已經把 article_category字義為了索引。資料庫大小為1.3g。

問題描述:

執行乙個很普通的查詢: select * from `article` where article_category=11 order by article_id desc limit 5 。執行時間大約要5秒左右

解決方案:

建乙個索引:create index idx_u on article (article_category,article_id);

select * from `article` where article_category=11 order by article_id desc limit 5 減少到0.0027秒

繼續問題:

select * from `article` where article_category in (2,3) order by article_id desc limit 5 執行時間要11.2850秒。

使用or:

select * from article

where article_category=2

or article_category=3

order by article_id desc

limit 5

解決方案:避免使用in 或者 or (or會導致掃表),使用union all

使用union all:

(select * from article where article_category=2 order by article_id desc limit 5)

union all (select * from article where article_category=3 order by article_id desc limit 5)

order by article_id desc

limit 5

mysql索引例項

需求描述 壓力測試有兩張表,主從表,每個表100萬以上。現在要兩個表關聯並進行group by分組。未優化sql select b.supplier name,b.supplier code,b.currency id from t outsourcing dtl a left join t out...

MySQL聯合索引例項

聯合索引又叫復合索引。對於復合索引 mysql從左到右的使用索引中的字段,乙個查詢可以只使用索引中的一部份,但只能是最左側部分。例如索引是key index a,b,c 可以支援a a,b a,b,c 3種組合進行查詢,但不支援 b,c進行查詢 當最左側欄位是常量引用時,索引就十分有效。兩個或更多個...

MySQL聯合索引例項

聯合索引又叫復合索引。對於復合索引 mysql從左到右的使用索引中的字段,乙個查詢可以只使用索引中的一部份,但只能是最左側部分。例如索引是key index a,b,c 可以支援a a,b a,b,c 3種組合進行查詢,但不支援 b,c進行查詢 當最左側欄位是常量引用時,索引就十分有效。兩個或更多個...