mysql 優化筆記與記錄

1.要有好的表結構

時間類型用int存儲

參考阿里mysql手冊

2.作爲條件的字段要加索引 where,order by group by 等,避免全表掃描,臨時表

3.重複、冗餘的索引要清除 (information_schema),或使用pt-duplicate-key-checker工具

SELECT a.TABLE_SCHEMA 數據名,a.TABLE_NAME 表名,a.INDEX_NAME 索引1,b.INDEX_NAME 索引2,a.COLUMN_NAME 重複列名 FROM STATISTICS a JOIN 
STATISTICS b ON a.TABLE_SCHEMA=b.TABLE_SCHEMA AND a.TABLE_NAME=b.TABLE_NAME
AND a.SEQ_IN_INDEX=b.SEQ_IN_INDEX AND a.COLUMN_NAME=b.COLUMN_NAME
WHERE a.SEQ_IN_INDEX=1 AND a.INDEX_NAME<>b.INDEX_NAME

4.limit偏移量高時需優化(索引覆蓋)

5.使用聯合索引時,把離散度 [select count(distinct col) from table] 高的字段放到前面 列: index_lh(col2,col1) col2離散度高,能夠快速檢索出結果

6.使用explain查看sql執行計劃

其他優化案例:

  • in中子查詢使用union all關聯 索引失效

SELECT
	*
FROM
	t1
WHERE
	num IN (
		SELECT
			num
		FROM
			t2
		WHERE
			id IN ('')
		UNION ALL
			SELECT
				num
			FROM
				t3
			WHERE
				num IN (
					SELECT
						num
					FROM
						t2
					WHERE
						id IN ('')
				)
	);

改爲 內連接  等價與in子查詢

SELECT
	*
FROM
	t1  ,(
		SELECT
			num
		FROM
			t2
		WHERE
			id IN ('')
		UNION ALL
			SELECT
				numm AS num
			FROM
				t3
			WHERE
				num IN (
					SELECT
						num
					FROM
						t2
					WHERE
						id IN ('')
				)
	) t
WHERE
	t1.num=t.num;

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章