在 MySQL 中,我們幾乎每天都會使用“COUNT”函數(shù)來幫助我們計算給定查詢的行數(shù)。每個開發(fā)者關于性能的最大困境是使用“COUNT(*)”還是“COUNT(id)”更好。
MySQL優(yōu)化器
MySQL 優(yōu)化器是 MySQL 的關鍵組件,負責確定執(zhí)行給定 SQL 查詢的最有效方式。這部分在“COUNT”最快的困境中起著關鍵作用。那么讓我們解釋一下…
我們創(chuàng)建“users”表,該表將在“first_name”列上有一個索引:
創(chuàng)建表用戶( id int NOT NULL AUTO_INCRMENT, 名字 varchar(256) NOT NULL, 主鍵(id), 索引 idx_first_name (first_name) );
登錄后復制
我們添加幾行并運行以下 2 個查詢:
解釋 SELECT COUNT(id) FROM 用戶;
登錄后復制
解釋 SELECT COUNT(*) FROM 用戶;
登錄后復制
當你運行這兩個 SQL 查詢時,你會注意到它們使用相同的索引,“COUNT(*)”一點也不慢,MySQL 優(yōu)化器負責這一點,它會在表中找到索引,從而給出最棒的表演。在這種情況下,兩個查詢將以相同的速度返回數(shù)據(jù),因為它們使用相同的索引,并且 MySQL 優(yōu)化器認為該索引是最有效的。
MySQL 優(yōu)化器考慮了許多有助于選擇最佳索引鍵的參數(shù),以便給定的查詢盡快返回數(shù)據(jù)。
結論
通常建議使用“COUNT(*)”,因為它允許 MySQL 優(yōu)化器選擇最有效的方法,而“COUNT(column_name)”在需要僅計算非 NULL 值的情況下特別有用??在特定的專欄中。了解 MySQL 優(yōu)化器的工作原理以及如何使用索引對于實現(xiàn)最佳查詢性能至關重要。