中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

優化MySQL有哪些技巧

發布時間:2020-05-27 10:40:14 來源:PHP中文網 閱讀:218 作者:三月 欄目:MySQL數據庫

不知道大家之前對類似優化MySQL有哪些技巧的文章有無了解,今天我在這里給大家再簡單的講講。感興趣的話就一起來看看正文部分吧,相信看完優化MySQL有哪些技巧你一定會有所收獲的。                                                           

1、在所有用于where,order by和group by的列上添加索引

1)索引除了能夠確保唯一的標記一條記錄,還能是MySQL云服務器更快的從數據庫中獲取結果。索引在排序中的作用也非常大。

Mysql的索引可能會占據額外的空間,并且會一定程度上降低插入,刪除和更新的性能。但是,如果你的表格有超過10行數據,那么索引就能極大的降低查找的執行時間。

2)強烈建議使用“最壞情況的數據樣本”來測試MySql查詢,從而更清晰的了解查詢在生產中的行為方式。

3)假設你正在一個超過500行的數據庫表中執行如下的查詢語句:

mysql>select customer_id, customer_name from customers where customer_id='345546'

上述查詢會迫使Mysql云服務器執行一個全表掃描來獲得所查找的數據。

4)型號,Mysql提供了一個特別的Explain語句,用來分析你的查詢語句的性能。當你將查詢語句添加到該關鍵詞后面時,MySql會顯示優化器對該語句的所有信息。

如果我們用explain語句分析一下上面的查詢,會得到如下的分析結果:

mysql> explain select customer_id, customer_name from customers where customer_id='140385';
+----+-------------+-----------+------------+------+---------------+------+---------+------+------+----------+-------------+| id | select_type | table     | partitions | type | possible_keys | key  | key_len | ref  | rows | filtered | Extra       |
+----+-------------+-----------+------------+------+---------------+------+---------+------+------+----------+-------------+|  1 | SIMPLE      | customers | NULL       | ALL  | NULL          | NULL | NULL    | NULL |  500 |    10.00 | Using where |

可以看到,優化器展示出了非常重要的信息,這些信息可以幫助我們微調數據庫表。首先,MySql會執行一個全表掃描,因為key列為Null。其次,MySql云服務器已經明確表示它將要掃描500行的數據來完成這次查詢。

5)為了優化上述查詢,我們只需要在customer_id這一列上添加一個索引m即可:

mysql> Create index customer_id ON customers (customer_Id);
Query OK, 0 rows affected (0.02 sec)
Records: 0  Duplicates: 0  Warnings: 0

如果我們再次執行explain語句,會得到如下結果:

mysql> Explain select customer_id, customer_name from customers where customer_id='140385';
+----+-------------+-----------+------------+------+---------------+-------------+---------+-------+------+----------+-------+| id | select_type | table     | partitions | type | possible_keys | key         | key_len | ref   | rows | filtered | Extra |
+----+-------------+-----------+------------+------+---------------+-------------+---------+-------+------+----------+-------+|  1 | SIMPLE      | customers | NULL       | ref  | customer_id   | customer_id | 13      | const |    1 |   100.00 | NULL  |
+----+-------------+-----------+------------+------+---------------+-------------+---------+-------+------+----------+-------+

2. 用Union優化Like語句

1)有時候,你可能需要在查詢中使用or操作符進行比較。當or關鍵字在where子句中使用頻率過高的時候,它可能會使MySQL優化器錯誤的選擇全表掃描來檢索記錄。union子句可以是查詢執行的更快,尤其是當其中一個查詢有一個優化索引,而另一個查詢也有一個優化索引的時候。

比如,在first_name和last_name上分別存在索引的情況下,執行如下查詢語句:

mysql> select * from students where first_name like 'Ade%' or last_name like 'Ade%'

上述查詢和下面使用union合并兩條充分利用查詢語句的查詢相比,速度慢了許多。

mysql> select * from students where first_name like 'Ade%' union all select * from students wherelast_name like 'Ade%'

3. 避免使用帶有前導通配符的表達式

當查詢中存在前導通配符時,Mysql無法使用索引。以上面的student表為例,如下的查詢會導致MySQL執行全表掃描,及時first_name字段上加了索引。

mysql> select * from students where first_name like '%Ade'

使用explain分析得到如下結果:

 | possible_keys | key  | key_len | ref  | rows | filtered | Extra       |
+----+-------------+----------+------------+------+---------------+------+---------+------+------+----------+-------------+|  1 | SIMPLE      | students | NULL       | ALL  | NULL          | NULL | NULL    | NULL |  500 |    11.11 | Using where |
+----+-------------+----------+------------+------+---------------+------+---------+------+------+----------+-------------+

如上所示,Mysql將掃描全部500行數據,這將使得查詢極其緩慢。

4. 優化數據庫架構

1)規范化

首先,規范化所有數據庫表,即使可能會有些損失。比如,如果你需要創建兩張表分別用來記錄customers和orders數據,你應當在order表上用顧客id引用顧客,而不是反過來。下圖顯示了沒有任何數據冗余而設計的數據庫架構。

優化MySQL有哪些技巧

5.使用最佳數據類型

1)MySQL支持各種數據類型,包括integer,float,double,date,datetime,varchar,text等。當設計數據庫表時,應當盡可能使用能夠滿足特性的最短的數據類型。

比如,如果你在設計一個系統用戶表,而該用戶數量不會超過100個人,你就應該對user_ud使用'TINYINT'類型,該類型的取值范圍為-128至128。如果一個字段需要存儲date型值,使用datetime類型比較好,因為在查詢的時候無需進行復雜的類型轉換。

當值全為數字類型時,使用Integer。在進行計算時,Integer類型的值比文本類型的值速度更快。

看完優化MySQL有哪些技巧這篇文章,大家覺得怎么樣?如果想要了解更多相關,可以繼續關注我們的行業資訊板塊。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

邹平县| 肇东市| 吴江市| 青川县| 金昌市| 屏边| 汉川市| 阿拉善右旗| 瓮安县| 鄱阳县| 台南县| 许昌市| 织金县| 平谷区| 涡阳县| 佛坪县| 故城县| 阳山县| 淳化县| 银川市| 高尔夫| 哈巴河县| 右玉县| 霍林郭勒市| 保山市| 甘泉县| 普格县| 石门县| 衡东县| 新蔡县| 诸暨市| 女性| 渭源县| 洞口县| 铁力市| 中卫市| 常宁市| 邯郸市| 湘潭市| 延长县| 密云县|