Sql的優化問題,含索引

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(abc)

使用方式 能否用上索引
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 不能

解釋:其實就像是闖關,只有第一關打通了,才能打第二關,第一關和第二關都過了才能打第三關,所以在設計索引的時候要把最常用的放在最左邊

 

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