count(field)速度非常慢,建議使用count(1)和count(*),mysql做了優化
過濾操作儘量寫在最內層,過濾要趁早
join的時候儘量將配置表放在內層,拿配置表(如人員表)去join大表
儘量不要取出所有數據,比如可以拿in 某些條件的 部分人員的數據出去再加工
不要使用select * :1.不需要的列會增加數據傳輸時間和網絡開銷
2.對於無用的大字段,如 varchar、blob、text,會增加 io 操作
準確來說,長度超過 728 字節的時候,會先把超出的數據序列化到另外一個地方,因此讀取這條記錄會增加一次 io 操作。(MySQL InnoDB)
3. 失去MySQL優化器“覆蓋索引”策略優化的可能性
SELECT * 杜絕了覆蓋索引的可能性,而基於MySQL優化器的“覆蓋索引”策略又是速度極快,效率極高,業界極爲推薦的查詢優化方式。
普通索引:最基本的索引,沒有任何限制
唯一索引:與"普通索引"類似,不同的就是:索引列的值必須唯一,但允許有空值。
主鍵索引:它 是一種特殊的唯一索引,不允許有空值。
全文索引:僅可用於 MyISAM 表,針對較大的數據,生成全文索引很耗時好空間。
組合索引:爲了更多的提高mysql效率可建立組合索引,遵循”最左前綴“原則。
Mysql常見索引有:主鍵索引、唯一索引、普通索引、全文索引、組合索引
PRIMARY KEY(主鍵索引) ALTER TABLE `table_name` ADD PRIMARY KEY ( `column` )
UNIQUE(唯一索引) ALTER TABLE `table_name` ADD UNIQUE (`column`)
INDEX(普通索引) ALTER TABLE `table_name` ADD INDEX index_name ( `column` )
FULLTEXT(全文索引) ALTER TABLE `table_name` ADD FULLTEXT ( `column` )
組合索引 ALTER TABLE `table_name` ADD INDEX index_name ( `column1`, `column2`, `column3` )
複合索引最左原則:
有一個複合索引:INDEX(a
, b
, c
)
使用方式 能否用上索引
select * from users where a = 1 and b = 2 能用上a、b
select * from users where b = 2 and a = 1 能用上a、b(有MySQL查詢優化器)
select * from users where a = 2 and c = 1 能用上a
select * from users where b = 2 and c = 1 不能
解釋:其實就像是闖關,只有第一關打通了,才能打第二關,第一關和第二關都過了才能打第三關,所以在設計索引的時候要把最常用的放在最左邊