單表如何提高Select的效率?

來源:互聯網
上載者:User
情景:一個分類頁面,因為每頁顯示的文章數量是固定的,通過設定位移量來實現分頁,大致如下:

SELECT * FROM test WHERE status=1 AND category='mycat' LIMIT 0, 30

在訪問量大且位移量大的情況下,效能不是很理想,而且隨著資料量增長也比較快,所以想請教在單表的情況下,如何儘可能地進行最佳化,希望能提供些思路,謝謝

回複內容:

情景:一個分類頁面,因為每頁顯示的文章數量是固定的,通過設定位移量來實現分頁,大致如下:

SELECT * FROM test WHERE status=1 AND category='mycat' LIMIT 0, 30

在訪問量大且位移量大的情況下,效能不是很理想,而且隨著資料量增長也比較快,所以想請教在單表的情況下,如何儘可能地進行最佳化,希望能提供些思路,謝謝

拋開業務上的最佳化不談 你可以做的有 最佳化表結構盡量能在區分度高的條件欄位加索引 常用資料走緩衝 資料裡大的情況下按時間或id進行分表

mysql可以嘗試分區(按月份分區),不是水平分表。

就你這個的情況,增加下聯合索引再試試。

ALTER TABLE `tablename`     ADD  INDEX `xxx-index` (`status`, `category`);

再根據訪問量統計一下 status,category組合中查詢頻率最高的,做一下緩衝(可臨時table,也可以直接redis等記憶體資料庫)

我有單表接近6000萬,組合條件查詢結果在90萬資料的情況下,翻頁還算是正常的,當然可能訪問量沒你的大。

具體情況要具體分析哈,explain下 掃表的情況,如果表太大用limit比較吃力的時候,可以分表,也可以redis輔助一下

  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.