1 在索引字段上使用模糊查詢: number_id like '%alibab%' 這種全模糊不建議在數據庫中查詢, 可以用solr框架進行 如果非要在數據庫中查, 可以在數據庫群中只讀節點上進行查詢, 防止占用太多的主業務數據庫資源2 盡量不訪問索引之外的字段 索引(member_id,subject) select subject from offer where member_id=234 這種查詢就優于下面的語句 select subject , gmtcreaated from offer where member_id=2343 計算count(id)有時比count(*)慢 count(id) === count(1) where id is not null 如果沒有(id)索引, 那么會用全表掃描, 而count(*)會使用最優的索引進行索引快速掃描4 正確使用stop機制 判斷member_id在offer表中是否存在記錄: select count(*) from offer where member_id=234 limit 1 優于 selecct count(*) from offer where member_id=234 因為第一條sql會得到第一條符合條件的記錄后停止5 分頁: 一般寫法: select * from t where selerid=100 limit 100000,20 普通的limit M,N的翻頁寫法, 往往在越往后面翻頁的過程中速度越慢, 因為MySQL會讀取表中的前M+N條數據, M越大,性能就越差 優化方法: select t1.* from t t1 (select id from t selleid=100 limit 10000,20) t2 where t1.id=t2.id; 優化后的翻頁寫法, 先查詢翻頁中需要的N條數據的主鍵id, 在根據主鍵id回表查詢所需要的N條數據, 此過程中查詢N條數據的逐漸id在索引中萬和城能, 6 數據量不大時, 在數據庫中進行搜索, 為字段建立索引, 并按照索引進行查詢 數據量大時, 可以用第三方搜索技術進行操作, 如solr或司勞克斯