首頁 資料庫 mysql教程 数据库设计和查询的一些简单优化_MySQL

数据库设计和查询的一些简单优化_MySQL

Jun 01, 2016 pm 01:28 PM
資料庫設計 網路 資料

bitsCN.com

  搜集了网络上的一些资料,关于数据库设计和和查询方面的简单优化,整理如下:

 

设计方面                                                                                                                                                                                                                       

1、设计表和表之间的关联,能够降低数据的冗余,保证了数据的完整性。但是多表之间的关联查询,却会降低性能,查询速度较低,尤其是数据量非常大的时候。2、增加数据冗余,会加快系统的响应时间,提高查询速度,但是如果冗余数据更新不及时,就会造成数据的不一致。3、所以对表之间的关联需要合理设计,关联的数据量是否非常大,查询是否频繁,关联的数据是否经常改变都需要考虑,以做出合理的数据冗余,保证数据的一致性,提高查询速度。4、最好不要用自增字段作为主键与其他表进行关联,这样不利于数据的迁移和数据的恢复,也不利于数据库的分区。5、表字段的长度不要设计过长,最好根据实际的长度选择字段类型,设置合适的长度,这样可以提高查询效率,建立索引的时候也可以降低资源的消耗。6、能够使用数字类型就尽量使用数字类型,数据库引擎在处理和连接时会逐个比较字符串中的每一个字符,而对于数字类型,只需要比较一次。7、不可变字符类型char查询快,但是耗存储空间;可变字符类型varchar查询相对慢一些但节省存储空间。在设计时可以灵活选择,如用户名、密码长度变化不大的字段可以用char,而对于评论等长度变化大的字段可以用varchar。
登入後複製

 

查询方面                                                                                                                                                                                                                        

1、在保证功能的基础上,尽可能减少对数据库的访问次数;尽量减少对表的访问行数;尽量最小化结果集。

2、用到几列就选择几列,不过多使用通配符

 

--少使用SELECT * FROM t_user;--用到几列选择几列SELECT username,password FROM t_user;
登入後複製

 

3、用到几行结果集就返回几行结果集,降低网络负担

SELECT username,password FROM t_user LIMIT 2;
登入後複製

4、尽量避免使用!=和操作符,否则查询用不到索引而会进行全表扫描

--尽量避免使用  和 !=SELECT * FROM t_user where username  'afei';SELECT * FROM t_user where username != 'afei';
登入後複製

 5、避免使用or来连接条件,否则查询用不到索引而会进行全表扫描

--尽量避免使用 ORSELECT * FROM t_user WHERE username = 'lihuai' OR username = 'afei';--可以使用 UNION ALL 代替SELECT * FROM t_user WHERE username = 'lihuai' UNION ALLSELECT * FROM t_user WHERE username = 'afei' 
登入後複製

6、尽量避免使用IN和NOT IN,否则查询用不到索引而会进行全表扫描

--在IN只有一个值时,还是可以用到索引mysql> explain SELECT * FROM t_user WHERE username IN ('lihuai') /G;*************************** 1. row ***************************           id: 1  select_type: SIMPLE        table: t_user         type: refpossible_keys: index_username          key: index_username      key_len: 18          ref: const         rows: 1        Extra: Using where1 row in set (0.00 sec)
登入後複製
--在IN中有两个以上的值时,无法再使用索引了SELECT * FROM t_user WHERE username IN ('lihuai','afei');
登入後複製
--尽量避免使用NOT INSELECT * FROM t_user WHERE username NOT IN ('lihuai','afei');
登入後複製

7、在模糊查询中,避免前端模糊,否则无法使用索引而会进行全表扫描

#--避免使用前端模糊查询SELECT * FROM t_user WHERE username LIKE '%lih%';SELECT * FROM t_user WHERE username LIKE '%lih'#--后端端模糊查询可以用到索引SELECT * FROM t_user WHERE username LIKE 'lih%'
登入後複製
mysql> explain SELECT * FROM t_user WHERE username LIKE 'lih%' /G;*************************** 1. row ***************************           id: 1  select_type: SIMPLE        table: t_user         type: rangepossible_keys: index_username          key: index_username      key_len: 18          ref: NULL         rows: 2        Extra: Using where1 row in set (0.00 sec)
登入後複製

8、避免对查询字段进行表达式和函数操作,否则无法使用索引而会进行全表扫描

#--避免对字段进行表达式操作SELECT * FROM t_user WHERE age/2 = 20;--可以改成这样SELECT * FROM t_user WHERE age = 20*2;#--避免对字段进行函数操作SELECT * FROM t_user WHERE SUBSTR(username,1,3) = 'lih';#--可以改成这样SELECT * FROM t_user WHERE username LIKE 'lih%';
登入後複製

9、很多时候可以使用EXISTS 替代 IN

--用INSELECT * FROM t_user t1 WHERE t1.username IN (SELECT t2.username FROM t_temp t2 WHERE t2.age=20);--用EXISTSSELECT * FROM t_user t1 WHERE EXISTS (SELECT 1 FROM t_temp t2 WHERE t1.username=t2.username AND t2.age=20);
登入後複製

两者的结果一样,但是EXISTS 的效率好于IN,EXISTS 不会产生大量锁定的表扫描

 

 

bitsCN.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1664
14
CakePHP 教程
1423
52
Laravel 教程
1318
25
PHP教程
1268
29
C# 教程
1248
24
Windows 11 上如何調整 MTU 大小 Windows 11 上如何調整 MTU 大小 Aug 25, 2023 am 11:21 AM

如果您在Windows11上突然出現緩慢的互聯網連接,並且您已經嘗試了書中的所有技巧,那麼它可能與您的網絡無關,而是與您的最大傳輸單元(MTU)無關。如果您的系統發送或接收具有錯誤MTU大小的數據,則可能會出現問題。在這篇文章中,我們將了解如何在Windows11上更改MTU大小以實現流暢和不間斷的網路連線。 Windows11中的預設MTU大小是多少? Windows11中的預設MTU大小為1500,這是允許的最大值。 MTU代表最大傳輸單位。這是可以在網路上發送或接收的最大資料包大小。每個支援網

WLAN擴充模組已停止[修復] WLAN擴充模組已停止[修復] Feb 19, 2024 pm 02:18 PM

如果您的Windows電腦上的WLAN擴充模組出現問題,可能會導致您與網際網路中斷連線。這種情況常常讓人感到困擾,但幸運的是,本文提供了一些簡單的建議,可以幫助您解決這個問題,讓您的無線連線重新正常運作。修復WLAN擴充模組已停止如果您的Windows電腦上的WLAN可擴充性模組已停止運作,請依照下列建議進行修復:執行網路和Internet故障排除程式停用並重新啟用無線網路連線重新啟動WLAN自動設定服務修改電源選項修改高級電源設定重新安裝網路適配器驅動程式運行一些網路命令現在,讓我們來詳細看

win11 DNS伺服器錯誤如何解決 win11 DNS伺服器錯誤如何解決 Jan 10, 2024 pm 09:02 PM

我們在連接網路時需要使用正確的dns才可以上網。同理,如果我們使用了錯誤的dns設定就會提示dns伺服器錯誤了,這時候我們可以嘗試在網路設定中選擇自動取得dns來解決,以下就一起來看下具體解決方法吧。 win11網路dns伺服器錯誤怎麼辦方法一:重新設定DNS1、首先,點選工作列中的開始進入,在其中找到並點選「設定」圖示按鈕。 2、然後點選左側欄中的「網路&Internet」選項指令。 3、然後在右側找到「乙太網路」選項,點選進入。 4、之後,點選DNS伺服器指派中的“編輯”,最後將DNS設定為“自動(D

解決Chrome,Google雲端硬碟和照片上的「失敗網路錯誤」下載! 解決Chrome,Google雲端硬碟和照片上的「失敗網路錯誤」下載! Oct 27, 2023 pm 11:13 PM

什麼是「網路錯誤下載失敗」問題?在我們深入研究解決方案之前,讓我們先了解「網路錯誤下載失敗」問題的含義。當下載過程中網路連線中斷時,通常會發生此錯誤。它可能由於各種原因而發生,例如互聯網連接薄弱、網路擁塞或伺服器問題。發生此錯誤時,下載將停止,並顯示錯誤訊息。如何修復失敗的網路錯誤下載?在存取或下載必要的文件時,遇到「網路錯誤下載失敗」可能會成為障礙。無論您是使用Chrome等瀏覽器還是Google雲端硬碟和Google相簿等平台,都會彈出此錯誤,從而造成不便。以下是幫助您導覽和解決此問題的分

已修復: WD 我的雲未顯示在 Windows 11 中的網路上 已修復: WD 我的雲未顯示在 Windows 11 中的網路上 Oct 02, 2023 pm 11:21 PM

如果WDMyCloud未在Windows11的網路上顯示,這可能是一個大問題,尤其是當您將備份或其他重要檔案儲存在其中時。對於經常需要存取網路儲存的用戶來說,這可能是一個大問題,因此在今天的指南中,我們將向您展示如何永久解決此問題。為什麼WDMyCloud未顯示在Windows11網路上?您的MyCloud裝置、網路介面卡或網路連線未正確配置。電腦上未安裝SMB功能。 Winsock的臨時故障有時會導致此問題。如果我的雲端未顯示在網路上,我該怎麼辦?在我們開始修復問題之前,您可以執行一些初步檢查:

在 Windows 11 中如何啟用/停用區域網路喚醒功能 在 Windows 11 中如何啟用/停用區域網路喚醒功能 Sep 06, 2023 pm 02:49 PM

LAN喚醒是Windows11上的網路功能,有了它,您可以遠端將電腦從休眠或睡眠模式喚醒。雖然臨時用戶不經常使用它,但此功能對於使用有線網路的網路管理員和高級用戶非常有用,今天我們將向您展示如何設定它。如何知道我的電腦是否支援LAN喚醒?要使用此功能,您的電腦需要以下各項:PC需要連接到ATX電源,以便您可以遠端將其從睡眠模式喚醒。需要建立存取控制清單並將其新增至網路中的所有路由器。網路卡需要支援喚醒區域網路功能。要使此功能正常運作,兩台電腦需要位於同一網路上。雖然大多數以太網適配器通過以

win10無法上網右下角顯示地球怎麼辦 win10網路成地球無法上網的多種解決方法 win10無法上網右下角顯示地球怎麼辦 win10網路成地球無法上網的多種解決方法 Feb 29, 2024 am 09:52 AM

這篇文章將介紹Win10系統網路顯示地球標誌但無法上網的解決方法。文章將提供詳細的操作步驟,幫助讀者解決Win10網路顯示地球無法上網的問題。方法一:直接重啟先檢查網路線是否沒插好,寬頻是否欠費,路由器或光貓可能會卡死,這時需重新啟動路由器或光貓。假如目前電腦沒有重要的事宜在操作,能直接重啟電腦,大部分的小問題能透過重新啟動電腦來快速解決。如果確定寬頻沒有欠費,網路正常,那便是另一回事。方法二:1、按【Win】鍵,或點選左下角的【開始選單】,在開啟的選單項目中,點選電源按鈕上方的齒輪狀圖標,這個就是【設

如何在 Windows 11 上檢查網路連線詳細資訊和狀態 如何在 Windows 11 上檢查網路連線詳細資訊和狀態 Sep 11, 2023 pm 02:17 PM

為了確保您的網路連線正常運作或解決問題,有時您需要檢查Windows11上的網路連線詳細資訊。透過這樣做,您可以查看各種信息,包括您的IP位址、MAC位址、連結速度、驅動程式版本等,在本指南中,我們將向您展示如何做到這一點。如何在Windows11上找到網路連線詳細資訊? 1.使用「設定」應用程式按+鍵開啟Windows設定。 WindowsI接下來,導覽至左窗格中的網路和互聯網,然後選擇您的網路類型。在我們的例子中,這就是乙太網路。如果您使用的是無線網絡,請改為選擇Wi-Fi網路。在螢幕底部,您應該會看

See all articles