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進行查詢 當最左側欄位是常量引用時,索引就十分有效。兩個或更多個...