本文目錄一覽:
mysql 獨有的特性?
MySQL的一些特點
1. 使用核心線程的完全多線程。這意味著它能很容易地利用多CPU(如果有)。
2. 支持C 、C++、 Eiffel 、 Java、 Perl、 PHP、Python、和 TCL API等客戶工具和 API。
3. 可運行在不同操作系統平台上。
4. 支持多種列類型:1、 2、 3、4、和 8 位元組長度的有符號/無符號整數、FLOAT、DOUBLE、CHAR、VARCHAR、TEXT、BLOB、DATE、TIME、DATETIME、 TIMESTAMP、YEAR、SET和ENUM類型。
5. 利用一個優化的一遍掃描多重聯結(one-sweep multi-join)非常快速地進行聯結(join)。
6. 在查詢的SELECT和WHERE部分支持全部運算符和函數,例如:
mysql SELECT CONCAT(first_name, ” “, last_name) FROM tbl_name
WHERE income/dependents 10000 AND age 30;
7. 通過一個高度優化的類庫實現SQL函數庫並且像他們能達到的一樣快速,通常在查詢初始化後不應該有任何內存分配。
8. 全面支持SQL的GROUP BY和ORDER BY子句,支持聚合函數( COUNT()、COUNT(DISTINCT)、AVG()、STD()、SUM()、 MAX()和MIN() )。
9. 支持ANSI SQL的LEFT OUTER JOIN和ODBC語法,你可以在同一查詢中混用來自不同資料庫的表。
10. 一個非常靈活且安全的許可權和口令系統,並且它允許基於主機的認證。口令是安全的,因為當與一個伺服器連接時,所有的口令傳送被加密。
11. ODBC for Windiws 95。所有的 ODBC 2 . 5 函數和其他許多函數。例如,你可以用Access連接你的 MySQL伺服器,具備索引壓縮的快速B樹磁碟表。
12. 每個表允許有16個索引。每個索引可以由1~16個列或列的一部分組成。最大索引長度是 256 個位元組(在編譯MySQL時,它可以改變)。一個索引可以使用一個CHAR或VARCHAR欄位的前綴。
13. 定長和變長記錄。用作臨時表的內存散列表。
14. 大資料庫處理。我們正在對某些包含 50,000,000 個記錄的資料庫使用MySQL。
15. 所有列都有預設值,你可以用INSERT插入一個表列的子集,那些沒用明確給定值的列設置為他們的預設值。為了可移植性使用 GNU Automake , Autoconf 和libtool。
16. 用C和C++編寫,並用大量不同的編譯器測試,一個非常快速的基於線程的內存分配系統。
17. 全面支持ISO-8859-1 Latin1 字符集。例如,斯堪的納維亞的字元 @ringaccent{a}, @”a and @”o 在表和列名字被允許。
18. 表和列的別名符合 SQL92 標準。
19. 函數名不會與表或列名衝突。例如ABS是一個有效的列名字。
20. 客戶端使用TCP/IP 連接或Unix套接字(socket)或NT下的命名管道連接MySQL。
21. MySQL特有的SHOW命令可用來檢索資料庫、表和索引的信息,EXPLAIN命令可用來確定優化器如何解決一個查詢。
以上來自網路,我自己感覺的話有:
1、輕量級、體積小
2、可嵌入
3、支持多重存儲引擎
4、開源
5、適用海量查詢、PHP等網站開發支持最好了,建站首選。
MYSQL相比於其他資料庫有哪些特點
1.使用C和C++編寫,並使用了多種編譯器進行測試,保證源代碼的可移植性 ;
2.支持AIX、FreeBSD、HP-UX、Linux、Mac OS、Novell Netware、OpenBSD、OS/2 Wrap、Solaris、Windows等多種操作系統 ;
3.為多種編程語言提供了API。這些編程語言包括C、C++、Eiffel、Java、Perl、PHP、Python、Ruby和Tcl等。 ;
4.支持多線程,充分利用CPU資源 ;
5.優化的SQL查詢演算法,有效地提高查詢速度 ;
6.既能夠作為一個單獨的應用程序應用在客戶端伺服器網路環境中,也能夠作為一個庫而嵌入到其他的軟體中提供多語言支持,常見的編碼如中文的GB 2312、BIG5,日文的Shift_JIS等都可以用作數據表名和數據列名;
7.提供TCP/IP、ODBC和JDBC等多種資料庫連接途徑 ;
8.提供用於管理、檢查、優化資料庫操作的管理工具 ;
9.可以處理擁有上千萬條記錄的大型資料庫。
mysql8好用嗎?現在用的多嗎?
mysql8 可以說是一個質的飛越。增加了很多新特性,以及提高了各方面的速度。增加了開窗函數
Ⅱ InnoDB增強
自增列方面
自增列方面。現在自增列計數器會在每次值修改時,將值寫到REDO LOG中,並且在CHECKPOINT時寫到存儲引擎私有的系統表中。
這就消除了以往重啟實例自增列不連續的問題(這也可能形成了一個新的競爭點(蓋國強會上提問InnoDB開發者))。
Btree索引方面
Btree索引被損壞。InnoDB會向REDO LOG中寫入一個損壞標誌。同時也會CHECKPOINT時將內存中損壞頁的數據記錄到存儲引擎私有的系統表中。
這也就促成了恢復時。兩邊一致的情形。索引不可用,並不會造成實例起不來。這很大程度上降低了之前使用innodb_force_recovery和innodb_fast_shutdown的必要。
提升了一致性。(對於一般DBA來說透明,知道有這麼回事就好)
NoSQl操作
InnoDB memcached插件支持多個get操作(在單個memcached查詢中獲取多個鍵/值對)
和範圍查詢。(個人認為這個挺牛逼,有點像NoSQL,不僅僅是NoSQL)。
需要安裝daemon_memcached插件,其中多了一個innodb_memcache schema,這個schema中有幾張表,其中一張containers用來與InnoDB表之間做映射,,
然後通過介面訪問Innodb表。然後會有一個11211的埠打開,用於建立連接。
好處是通過減少客戶端和伺服器之間的通信流量,在單個memcached查詢中獲取多個鍵/值對的功能可以提高讀取性能。
對於InnoDB來說,也意味著更少的事務和開放式表操作。
死鎖檢測
新的動態配置選項innodb_deadlock_detect可用于禁用死鎖檢測,默認打開。 在高並發系統上,當大量線程等待相同的鎖時,死鎖檢測會導致速度下降。 有時,在死鎖發生時,
禁用死鎖檢測並依賴innodb_lock_wait_timeout設置進行事務回滾可能更有效。記得之前版本遇到死鎖會自動回滾。以下截圖來自MySQL5.7,與8.0默認相同。
(也就是說即便MySQL5.7也是有死鎖檢測的,並且自動回滾權重較小的事務(套死除外))。
嘗試更改innodb_deadlock_detect參數為OFF。則遇到死鎖時兩個工作線程都會被堵塞。直到innodb_lock_wait_timeout設定的鎖超時。
新的INFORMATION_SCHEMA.INNODB_CACHED_INDEXES表保存了Innodb索引緩存在Innodb buffer pool中的頁數。
現在,所有InnoDB臨時表都將在共享臨時表空間ibtmp1中創建。
加密特性
支持REDO和UNDO表空間加密。
共享鎖方面
InnoDB在 SELECT … FOR SHARE 和 SELECT … FOR UPDATE鎖定讀語句上 支持不等待( NOWAIT)和跳過鎖(SKIP LOCKED)的選項。也就是說以往加了共享鎖之後必須手動釋放。
這裡如果沒有鎖就返回結果,如果有就報下面錯誤。
如果是用有鎖就跳過,則無數據。
根據場景使用。反正都是秒回。降低了排查資料庫超時的可能。
原創文章,作者:O3BC0,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/128354.html