SQL問題,有沒有什么工具可以直接打開MYI和MYD文件?
兩者都是MYSQL數據庫文件。MYD是該表的數據文件。MYI是表數據文件中任何索引的數據樹。你要先安裝MYSQL(這個是免費的),然后安裝類似MYSQL-FRONT的軟件,連接后就可以瀏覽他數據庫的內容了。
還有一些其他的MYSQL客戶端軟件也很好用,比如NavicatforMYSQL(有免費版NavicatLit
架構師必須掌握的如何思考設計SQL優化方案?
你可能在剛立項的時候沒有考慮周全。隨著產品的推廣,業務場景的復雜,用戶使用量的增加,數據會呈現快速增長。當數據達到千萬級時,會發現查詢速度越來越慢,用戶體驗越來越差。如何提高千萬級數據的查詢效率?小萌簡單整理了一下,希望能幫到大家!
優化數據庫設計:
在數據字段類型中用Varchar/nvarchar代替char/nchar,所以變長字段的存儲空間小,節省存儲空間。查詢時小空間字段的搜索效率更高。
查詢時避免掃描整個表,并且可以在where和orderby字段上建立索引。
無法判斷where查詢子句中的空值將導致搜索引擎放棄使用索引,而使用全表掃描。例如,age的默認值可以設置為0,以確保沒有空值。修改后的sql查詢語句是:selectid,namefromuserwhereage0。
小心使用索引,不是越多越好。通常,一個表中的索引數量不應超過6個。如果索引太多,就要討論業務是否合理,或者索引是否建立在不常用的字段上。索引可以提高select查詢的效率,但也降低了insert和update的效率,因為執行insert和update時可能會重新構建索引。
盡量不要更新索引數據,因為索引數據的順序就是表記錄的物理順序。一旦改變,整個表記錄的順序也會改變,會消耗大量資源。如果業務需要頻繁更新索引數據列,就要考慮索引創建是否合理。例如,如果用戶ID、身份證號或手機號不經常變化,則可以創建索引。
如果符合業務需求,可以將字符型字段修改為數值型字段,因為字符型字段會降低查詢和連接的性能,增加存儲。存儲成本。執行搜索的合適的查詢和連接將逐個比較字符串的每個字符,如果是數據類型比較,就足夠了。
SQL查詢優化
避免在where查詢語句中使用**!或ltgt**運算符,搜索引擎將執行全表掃描,而不執行創建的索引。
避免在where查詢語句中使用or來連接條件查詢數據還會導致搜索引擎執行全表掃描,而不執行創建的索引。例如,年齡為18歲或25歲的用戶的姓名可以更改為選擇ID,年齡為18歲的用戶的姓名聯合所有選擇ID,年齡為25歲的用戶的姓名。
**in和notin也避免了,這樣也會導致全表掃描,比如:selectID,namefromuserwhereagein(18,19,20)**如果是連續的,可以考慮使用betweenand,比如:selectID,namefromuserwhereagein18-20。
like語句會掃描整個表,例如selectID,namefromuserwherenamelike%%。
避免在wehre查詢語句中使用參數,整個表都會被掃描。SQL將在運行時分析局部變量,優化器不能將訪問計劃的選擇推遲到運行時。必須在編譯時選擇它。如果訪問計劃是在編譯時建立的,那么變量的值仍然是未知的,所以它不能作為索引選擇的輸入項。例如,以下語句將掃描整個表:selectID,namefromuserwhereage@age。當然也可以改成強制索引:selectID,namefromuserwith(indexname)其中age@age。
Where查詢語句避免使用表達式,這也會導致查詢時放棄使用索引,導致全表掃描。示例選擇id,姓名來自用戶,其中年齡/210**可更改為**選擇id,姓名來自用戶,其中年齡102*。
Where查詢語句避免使用函數操作,這也會導致查詢時放棄使用索引,導致全表掃描。例如:selectid,namefromuserwheresubstring(name,1,3);abc可以更改為選擇id,名稱從用戶的名字一樣ABC%。
唐不要使用select*from用戶查詢,請使用特定的字段名稱。唐不要返回任何未使用的字段。
唐不要使用游標。大家都知道游標效率很低。
避免大的實際業務會降低系統的并發性。
Java后臺優化
使用JDBC連接到數據庫。
數據緩存的合理使用。
控制記憶,唐不要把所有的數據都放進去處理,你可以邊讀邊處理。
創建更少的對象。
數據庫性能優化
使用存儲過程
如果在具體的業務實現過程中,可以使用存儲過程來操作數據庫,那就盡量使用。因為存儲過程是一次性設計、編碼、測試、再次調用,需要執行,所以可以簡單使用。它可以提高響應速度,減少網絡流量等。
硬件調整
磁盤和網絡吞吐量也可能影響數據庫性能。通過擴展虛擬內存,可以分別部署數據庫服務器和主服務器。數據服務器吞吐量被調整到最大。
調整數據庫
如果在實際業務實現中表的查詢頻率過高,可以在表上創建索引;根據where查詢條件,建立索引,盡量建立只有一個聚集索引的整數鍵,數據物理上在數據頁上以便縮短搜索范圍,對查詢中經常使用的所有列建立非聚集索引,可以最大程度的覆蓋查詢;但是索引不應該太多,維護這些索引執行UPDATEDELETEINSERT語句所需的銷售額急劇增加;避免索引中有太多的鍵;避免使用具有大數據類型的列作為索引;確保每個鍵值都有幾行。