mysql提供了一個特別的explain語句,用來分析查詢語句的性能 : explain select ... 1.在所有用於where,order by,group by的列上添加索引 創建索引 2.用union優化like語句 當or關鍵字在where子句中使用頻率過高時,它可能會使mysql優 ...
mysql提供了一個特別的explain
語句,用來分析查詢語句的性能 : explain select ...
1.在所有用於where,order by,group by的列上添加索引
創建索引
添加主鍵索引 : ALTER TABLE `table_name` ADD PRIMARY KEY (`column`) 添加唯一索引 : ALTER TABLE `table_name` ADD UNIQUE (`column`) 添加全文索引 : ALTER TABLE `table_name` ADD FULLTEXT (`column`) 添加普通索引 : ALTER TABLE `table_name` ADD INDEX index_name (`column` ) 添加組合索引 : ALTER TABLE `table_name` ADD INDEX index_name (`column1`, `column2`, `column3`)
2.用union優化like語句
當or關鍵字在where子句中使用頻率過高時,它可能會使mysql優化器錯誤的選擇全表掃描來檢索記錄。union子句可以使查詢執行的更快,尤其是當其中一個查詢有一個優化索引,而另一個查詢也有一個優化索引的時候
比如,在first_name
和last_name
上分別存在索引的情況下,執行如下查詢語句
mysql> select * from students where first_name like 'abc%' or last_name like 'abc%'
上述查詢和下麵使用union合併兩條充分利用查詢語句的查詢相比,速度慢了許多
mysql> select * from students where first_name like 'abc%' union all select * from students where last_name like 'abc%'
3.避免使用帶有前導通配符的表達式
當查詢中存在前導通配符時,mysql無法使用索引,查詢會導致MySQL執行全表掃描
使用MySQL的全文檢索(FTS)代替使用通配符查詢數據
mysql> alter table students add fulltext(first_name, last_name); mysql> select * from students where match(first_name, last_name) against ('abc');