亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

MySQL 索引設(shè)計的全過程(原理、原則與實戰(zhàn)案例)

 更新時間:2025年05月30日 10:09:24   作者:碼熔burning  
索引設(shè)計是一個持續(xù)優(yōu)化、不斷學(xué)習(xí)的過程,沒有一勞永逸的方案,只有最適合當(dāng)前業(yè)務(wù)負載的索引,本文給大家介紹MySQL索引設(shè)計的全過程(原理、原則與實戰(zhàn)案例),感興趣的朋友一起看看吧

前言

你好呀,數(shù)據(jù)庫性能優(yōu)化的同道們!?? 索引是提升數(shù)據(jù)庫查詢性能的“核武器”,但正如“能力越大,責(zé)任越大”一樣,索引用不好,也可能帶來負面影響(比如降低寫性能,占用磁盤空間)。所以,如何設(shè)計合適的索引,是每個開發(fā)者和 DBA 必備的技能。

索引設(shè)計沒有放之四海而皆準(zhǔn)的公式,它高度依賴于你的具體的業(yè)務(wù)場景和查詢負載。但幸運的是,有一些通用的原則和方法論,可以指導(dǎo)我們做出更明智的設(shè)計決策。

第一章:索引設(shè)計的基礎(chǔ)原則 (知其然,更要知其所以然)

就像蓋房子得先打地基,設(shè)計索引也得先掌握基礎(chǔ)原則。

1. 索引不是越多越好,更不是全表索引!

  • 成本: 每個索引都需要占用磁盤空間。更重要的是,INSERT, UPDATE, DELETE 操作時,數(shù)據(jù)庫不僅要修改數(shù)據(jù)行,還要同步修改所有相關(guān)的索引。索引越多,寫操作的開銷越大,可能成為新的瓶頸。
  • 優(yōu)化器負擔(dān): 索引越多,查詢優(yōu)化器選擇執(zhí)行計劃時需要考慮的可能性就越多,反而可能增加優(yōu)化器的決策時間,甚至選錯索引。

原則: 只為真正能提升性能、且頻繁執(zhí)行的查詢創(chuàng)建索引。對寫操作頻繁的表,索引尤其要謹(jǐn)慎。

2. 索引應(yīng)建在 WHERE, JOIN, ORDER BY, GROUP BY 子句中引用的列上。

這是索引最主要的受益場景。

  • WHERE:用于快速過濾數(shù)據(jù)行。這是最重要的索引候選區(qū)域。
  • JOIN: 用于快速找到關(guān)聯(lián)表中的匹配行。
  • JOIN 條件中的列在兩邊表中都應(yīng)該考慮建索引。
  • ORDER BY / GROUP BY:用于避免昂貴的排序(Filesort)和臨時表(Using Temporary)操作。

原則: 優(yōu)先考慮在這些子句中頻繁出現(xiàn)的列上建索引。

3. 考慮列的“選擇性”(Cardinality,區(qū)分度)。

選擇性是指列中不重復(fù)值的比例。計算公式:COUNT(DISTINCT column) / COUNT(*)。選擇性越高,意味著該列的值越多樣,通過該列進行條件過濾時,能越快地排除掉大量不符合條件的行。

  • 高選擇性: 主鍵、唯一鍵(如用戶 ID, 訂單號, 郵箱, 身份證號等)通常選擇性很高,非常適合作為索引。
  • 低選擇性: 性別 (男/女/未知)、布爾狀態(tài) (0/1) 等選擇性很低。單獨對這類列建索引意義不大,因為查某個值可能還是需要掃描表中近一半的數(shù)據(jù)。

原則: 高選擇性的列是獨立的索引或聯(lián)合索引前綴的優(yōu)先選擇。低選擇性的列單獨建索引效果有限,但可以在聯(lián)合索引中與高選擇性列組合使用,或者用于覆蓋索引。

4. 謹(jǐn)慎選擇數(shù)據(jù)類型。

  • 越小越好: 索引存儲的是列值,值越小,索引占用的空間越小,每個索引頁能存儲的索引條目越多,I/O效率越高??紤]使用 INT 而不是 BIGINT (如果數(shù)值范圍允許),使用 VARCHAR 時盡量預(yù)估合理長度。
  • 固定長度更好: INT, CHAR 等固定長度類型比 VARCHAR 等變長類型更容易索引和查找。
  • 避免在索引中使用過長的字符串。 如果必須索引長字符串,可以考慮使用前綴索引(VARCHAR(255), 索引時只取前 N 個字符,如 INDEX (column(10)))。但要注意前綴索引的選擇性損失。

原則: 在滿足業(yè)務(wù)需求的前提下,選擇占用空間小、固定長度的數(shù)據(jù)類型作為索引列。

5. 理解并善用聯(lián)合索引 (Composite Index)。

當(dāng)查詢條件或排序/分組涉及多個列時,聯(lián)合索引往往比多個單列索引更有效。

  • 最左前綴原則: 這是聯(lián)合索引最重要的原理。對于聯(lián)合索引 (colA, colB, colC),它可以被用于查詢 colA, (colA, colB), (colA, colB, colC) 作為查詢條件或排序/分組前綴的場景。但不能用于只查 colB, colC, (colB, colC) 等不包含最左前綴列的場景。
  • 列的順序: 聯(lián)合索引中列的順序至關(guān)重要!通常將最常用在 WHERE 子句中進行等值過濾、或選擇性最高的列放在最前面。然后根據(jù) WHERE 的范圍過濾、GROUP BY、ORDER BY 的需求依次排列。

原則: 分析查詢模式,如果多個列經(jīng)常一起出現(xiàn)在 WHERE, JOIN, ORDER BY, GROUP BY 中,考慮建立聯(lián)合索引。根據(jù)最左前綴原則精心設(shè)計列的順序。

6. 追求覆蓋索引 (Covering Index)。

如果一個索引包含了查詢所需的所有列(SELECT 列表中的列和 WHERE 子句中的列),MySQL 可以直接從索引中返回數(shù)據(jù),無需回表查詢完整的行。這效率極高!EXPLAINExtra 列會顯示 Using index。

原則: 對于某些性能要求極高且列數(shù)量不多的查詢,可以考慮創(chuàng)建包含所有所需列的覆蓋索引。但這會增加索引的大小和寫開銷,需要權(quán)衡。

7. 定期審查和優(yōu)化索引。

業(yè)務(wù)在發(fā)展,數(shù)據(jù)在變化,查詢模式也可能隨之改變。過去有效的索引,現(xiàn)在可能不再最優(yōu),甚至變成了累贅。

原則: 利用慢查詢?nèi)罩?、性能監(jiān)控工具,定期分析數(shù)據(jù)庫負載,檢查索引的使用情況(例如,通過 sys 庫或 information_schema ),刪除不再使用或效率低下的索引,為新的查詢瓶頸創(chuàng)建索引。

8. EXPLAIN是你的眼睛。

所有索引設(shè)計的猜想和優(yōu)化都需要通過 EXPLAIN 來驗證實際的執(zhí)行計劃。

原則: 設(shè)計或調(diào)整索引后,一定要使用 EXPLAIN 來查看目標(biāo)查詢是否使用了預(yù)期的索引,type, key, rows, Extra 列的信息是否符合優(yōu)化目標(biāo)(例如,避免 Using filesort, Using temporary, ALL, 減少 rows,出現(xiàn) Using index)。

第二章:實戰(zhàn)案例:電商訂單系統(tǒng)的索引設(shè)計

理論說了不少,現(xiàn)在咱們結(jié)合一個具體的電商訂單系統(tǒng)場景,來看看如何應(yīng)用這些原則。

假設(shè)我們有以下簡化版的表結(jié)構(gòu):

-- 用戶表
CREATE TABLE users (
    user_id INT PRIMARY KEY AUTO_INCREMENT,
    username VARCHAR(50) UNIQUE NOT NULL,
    email VARCHAR(100) UNIQUE NOT NULL,
    registration_date DATE NOT NULL,
    city VARCHAR(50),
    -- ... 其他用戶信息
    INDEX idx_user_regdate (registration_date) -- 按注冊日期查找用戶
);
-- 商品表
CREATE TABLE products (
    product_id INT PRIMARY KEY AUTO_INCREMENT,
    product_name VARCHAR(100) NOT NULL,
    category_id INT,
    price DECIMAL(10, 2),
    -- ... 其他商品信息
    INDEX idx_product_category (category_id) -- 按分類查找商品
);
-- 訂單表
CREATE TABLE orders (
    order_id INT PRIMARY KEY AUTO_INCREMENT,
    user_id INT NOT NULL,
    order_time DATETIME NOT NULL,
    total_amount DECIMAL(10, 2) NOT NULL,
    status ENUM('Pending', 'Paid', 'Shipped', 'Completed', 'Cancelled') NOT NULL,
    city VARCHAR(50), -- 收貨城市
    -- ... 其他訂單信息
    INDEX idx_order_user_time (user_id, order_time), -- 按用戶和時間查找訂單
    INDEX idx_order_time (order_time) -- 按時間范圍查找訂單
);
-- 訂單項表 (一個訂單包含多個商品)
CREATE TABLE order_items (
    order_item_id INT PRIMARY KEY AUTO_INCREMENT,
    order_id INT NOT NULL,
    product_id INT NOT NULL,
    quantity INT NOT NULL,
    price DECIMAL(10, 2) NOT NULL, -- 購買時的價格
    -- ... 其他訂單項信息
    INDEX idx_item_order (order_id), -- 按訂單查找訂單項
    INDEX idx_item_product (product_id) -- 按商品查找訂單項 (用于統(tǒng)計商品銷量)
);

這些表結(jié)構(gòu)和索引是一些初步的設(shè)計,基于一些常見的訪問模式?,F(xiàn)在,我們考慮一些具體的業(yè)務(wù)查詢場景,并優(yōu)化索引:

場景一:查詢某個用戶的訂單歷史,按時間倒序排列。

-- 業(yè)務(wù)需求:用戶查看自己的訂單列表
SELECT order_id, order_time, total_amount, status
FROM orders
WHERE user_id = 12345
ORDER BY order_time DESC;
  • 分析: WHERE 條件是 user_id 等值查詢,ORDER BYorder_time 倒序。
  • 現(xiàn)有索引: idx_order_user_time (user_id, order_time)。這個聯(lián)合索引完美匹配了 WHEREORDER BY 的需求。user_id 作為聯(lián)合索引的最左前綴用于過濾,order_time 緊隨其后用于排序。MySQL 可以利用這個索引直接按照 user_id 找到對應(yīng)的訂單,并按照 order_time 的倒序讀取索引條目,避免 Filesort。
  • 優(yōu)化: 現(xiàn)有索引已經(jīng)很好。如果希望更進一步(比如查詢非常頻繁,且只需要這幾個列),可以考慮將 total_amountstatus 加入到索引中,形成覆蓋索引 (user_id, order_time, total_amount, status)。但這會增加索引大小和寫開銷。
  • EXPLAIN 驗證 EXPLAIN SELECT order_id, order_time, total_amount, status FROM orders WHERE user_id = 12345 ORDER BY order_time DESC; 應(yīng)該顯示 type: ref,key: idx_order_user_timeExtra沒有 Using filesort,如果使用覆蓋索引,Extra 會顯示 Using index

場景二:查詢某個城市最近一周已支付的訂單。

-- 業(yè)務(wù)需求:運營人員查看某個區(qū)域的近期訂單情況
SELECT order_id, user_id, order_time, total_amount
FROM orders
WHERE city = 'Beijing'
AND order_time >= '2025-04-01' -- 示例日期
AND status = 'Paid'
ORDER BY order_time DESC
LIMIT 100; -- 通常會限制結(jié)果集
  • 分析: WHERE 條件包括 city (等值), order_time (范圍), status (等值)。ORDER BYorder_time 倒序。有 LIMIT
  • 現(xiàn)有索引: idx_order_user_time (user_id, order_time) (不適用,user_id 不在 WHERE 中),idx_order_time (order_time) (可以用,但過濾性不夠)。問題: 現(xiàn)有的索引無法高效處理 citystatus 的過濾,也無法直接支持 cityorder_time 的聯(lián)合過濾和排序。很可能導(dǎo)致 Filesort 或全表掃描。
  • 設(shè)計新索引:
    • 考慮將 city 放在聯(lián)合索引最前面(等值過濾,區(qū)分度可能不如 user_id 但比 status 高)。
    • 然后是 order_time(范圍過濾,且用于排序)。status 是低選擇性,可以放在后面,或者如果查詢非常頻繁且需要覆蓋,可以放在最后。
    • 考慮覆蓋索引所需的列:order_id (主鍵自帶), user_id, total_amount
    • 方案一 (核心過濾與排序): INDEX idx_order_city_time (city, order_time)。這個索引能利用 city 過濾,利用 order_time 進行范圍掃描和排序(倒序掃描)。status 的過濾需要在回表后進行,user_idtotal_amount 也需要回表獲取。
    • 方案二 (包含狀態(tài)過濾,可能伴隨 ICP): INDEX idx_order_city_time_status (city, order_time, status)。這個索引可以利用 city 過濾,order_time 范圍掃描。理論上 status 條件可以在掃描索引時下推過濾(ICP),減少回表。但 status 選擇性低,ICP 效果可能有限。
    • 方案三 (覆蓋索引): INDEX idx_order_city_time_status_cover (city, order_time, status, user_id, total_amount)。這能避免回表,性能可能最高,但索引體積大,寫開銷高。
  • 選擇: 方案一通常是一個不錯的折衷,它解決了主要的 city 過濾和 order_time 排序問題。方案二可以嘗試驗證 ICP 的效果。方案三用于極致優(yōu)化,但要評估寫開銷。對于這個場景,先嘗試方案一或二,用 EXPLAIN 和實際數(shù)據(jù)測試,如果性能瓶頸仍在,再考慮方案三。
  • EXPLAIN 驗證: 使用 EXPLAIN 查看不同索引方案的執(zhí)行計劃,對比 type, key, rows, Extra (特別是看有沒有 Using filesort, Using index condition, Using index)。
-- 示例新索引
CREATE INDEX idx_order_city_time ON orders (city, order_time);
-- 或者考慮包含 status 的索引
CREATE INDEX idx_order_city_time_status ON orders (city, order_time, status);

場景三:統(tǒng)計每個商品在一個月內(nèi)的總銷量。

-- 業(yè)務(wù)需求:商品銷售報表
SELECT oi.product_id, p.product_name, SUM(oi.quantity) as total_sold
FROM order_items oi
JOIN products p ON oi.product_id = p.product_id
JOIN orders o ON oi.order_id = o.order_id -- 需要根據(jù)訂單時間過濾
WHERE o.order_time >= '2025-04-01' AND o.order_time < '2025-05-01'
GROUP BY oi.product_id, p.product_name
ORDER BY total_sold DESC; -- 按銷量排序(注意:聚合函數(shù)排序通常需要 Filesort)
  • 分析: 涉及 order_items, products, orders 三表 JOIN。過濾條件在 orders.order_time (范圍)。GROUP BYoi.product_idp.product_name。ORDER BY 是聚合函數(shù)結(jié)果。
  • 現(xiàn)有索引: orders 表有 idx_order_time (order_time) (可以用于時間范圍過濾),order_items 表有 idx_item_order (order_id)idx_item_product (product_id)products 表有 idx_product_category (category_id) (與此查詢無關(guān))。
  • 問題:
    • orders 表的時間過濾可以使用 idx_order_time。
    • order_itemsproducts 的 JOIN 條件 oi.product_id = p.product_id 在兩表都有索引 (idx_item_product 和主鍵),JOIN 效率尚可。
    • order_itemsorders 的 JOIN 條件 oi.order_id = o.order_idorder_items 有索引 (idx_item_order),orders 的主鍵是 order_id,JOIN 效率也尚可。
    • 關(guān)鍵在于 GROUP BY oi.product_id, p.product_name。 product_nameproducts 表,product_idorder_items 表??绫淼?GROUP BY 通常難以直接利用一個索引進行分組。聚合結(jié)果的排序 (ORDER BY total_sold DESC) 幾乎肯定需要 Filesort。
  • 設(shè)計新索引:
    • 首先確保 JOIN 字段有索引,這已經(jīng)有了 (order_id, product_id)。
    • 考慮 orders 表的時間過濾:idx_order_time (order_time) 是合適的。
    • 優(yōu)化 GROUP BY: 如果 product_idorder_items 中非常頻繁地用于分組,idx_item_product (product_id) 可以幫助按 product_id 掃描和分組,但需要結(jié)合 product_name。由于 product_name 來自 products 表,MySQL 需要在 JOIN 后進行分組。
    • 對于這種涉及跨表 GROUP BY 和聚合結(jié)果排序的復(fù)雜報表查詢,通常難以完全避免 Using temporaryUsing filesort。優(yōu)化的重點在于確保前期的過濾和 JOIN 走索引,減少需要分組和排序的數(shù)據(jù)量。
  • 可能的索引優(yōu)化點:
    • 確保 orders.order_time 有效索引,優(yōu)化時間范圍過濾。
    • 確保 JOIN 字段 (orders.order_id, order_items.order_id, order_items.product_id, products.product_id) 有效索引。
    • 現(xiàn)有索引已經(jīng)覆蓋了。
    • 如果 product_id 的分組是瓶頸,idx_item_product (product_id) 可以提供幫助。
  • EXPLAIN 驗證: 運行 EXPLAIN 查看 JOIN 順序、類型 (type)、使用的索引 (key)。重點關(guān)注 Extra 列是否有 Using temporaryUsing filesort。在這個場景下,它們很可能會出現(xiàn),但如果前期的 JOIN 和過濾優(yōu)化得當(dāng),F(xiàn)ilesort 和臨時表處理的數(shù)據(jù)量會大大減少。
-- 確保 JOIN 字段有索引 (已存在)
-- 確保 orders.order_time 有索引 (已存在)

更多場景和索引思考:

  • 按商品分類和價格范圍查詢商品: WHERE category_id = ... AND price BETWEEN ... -> INDEX (category_id, price)。
  • 按訂單狀態(tài)統(tǒng)計數(shù)量: WHERE status = '...'。Status 選擇性低,單獨索引意義不大。但如果經(jīng)常和時間一起查 WHERE status = '...' AND order_time >= ...,可以考慮 INDEX (status, order_time),status在前用于等值過濾,雖然過濾性弱,但可以利用 order_time 進行范圍掃描和排序?;蛘呖紤] INDEX (order_time, status),優(yōu)先利用時間范圍掃描,然后 status 可以在索引掃描過程中進行過濾(ICP)。哪個更好取決于實際數(shù)據(jù)分布和查詢習(xí)慣,需要測試。
  • 索引覆蓋的評估: 如果某個查詢 SELECT colA, colB FROM table WHERE colC = ... 頻繁執(zhí)行,且只需要 colA, colB, colC 這三列,可以考慮 INDEX (colC, colA, colB) 來實現(xiàn)覆蓋索引。

第三章:索引設(shè)計的實踐流程總結(jié)

結(jié)合上面的原則和實戰(zhàn),我們可以總結(jié)一個索引設(shè)計的實踐流程:

  • 分析業(yè)務(wù)需求和查詢負載: 收集慢查詢?nèi)罩荆私饽男┎樵兪瞧款i,它們涉及哪些表、哪些列,查詢頻率如何。
  • 分析查詢語句: 仔細查看慢查詢的 WHERE, JOIN, ORDER BY, GROUP BY, SELECT 子句。
  • 識別索引候選列: 找出最可能需要索引的列。
  • 評估列的特點: 考慮列的選擇性、數(shù)據(jù)類型、是否經(jīng)常更新。
  • 設(shè)計索引方案:
    • 考慮單列索引、聯(lián)合索引。
    • 設(shè)計聯(lián)合索引時,根據(jù)最左前綴原則和查詢模式確定列的順序。
    • 考慮是否需要創(chuàng)建覆蓋索引。
    • 權(quán)衡讀(查詢)性能和寫(寫)性能的開銷。
  • 創(chuàng)建候選索引: 在測試環(huán)境創(chuàng)建你設(shè)計的索引。
  • 使EXPLAIN 驗證 對目標(biāo)慢查詢運行 EXPLAIN,查看執(zhí)行計劃是否按照預(yù)期走了索引,是否有 Using filesort, Using temporary 等不良信息。對比優(yōu)化前后的 EXPLAIN 結(jié)果。
  • 性能測試: 在接近生產(chǎn)環(huán)境的數(shù)據(jù)量和負載下進行實際的性能測試,對比查詢響應(yīng)時間。
  • 部署到生產(chǎn)環(huán)境: 如果測試效果良好,謹(jǐn)慎地將索引變更部署到生產(chǎn)環(huán)境。
  • 監(jiān)控和審查: 持續(xù)監(jiān)控數(shù)據(jù)庫性能和索引使用情況,定期回顧和調(diào)整索引策略。

結(jié)語

索引設(shè)計是一個持續(xù)優(yōu)化、不斷學(xué)習(xí)的過程。沒有一勞永逸的方案,只有最適合當(dāng)前業(yè)務(wù)負載的索引。掌握索引的基礎(chǔ)原理,理解 WHERE, JOIN, ORDER BY, GROUP BY 如何利用索引,學(xué)會分析 EXPLAIN 輸出,并結(jié)合具體的業(yè)務(wù)場景進行實踐,你就能設(shè)計出高效的索引,讓你的數(shù)據(jù)庫查詢飛沙走石!??

到此這篇關(guān)于MySQL 索引設(shè)計的全過程(原理、原則與實戰(zhàn)案例)的文章就介紹到這了,更多相關(guān)mysql索引設(shè)計內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • MySQL校對規(guī)則沖突解決方案

    MySQL校對規(guī)則沖突解決方案

    MySQL錯誤1267表明在比較兩個字段時,它們的校對規(guī)則不一致,本文主要介紹了MySQL校對規(guī)則沖突解決方案,具有一定的參考價值,感興趣的可以了解一下
    2025-04-04
  • Mysql的 存儲過程procedure及具體案例

    Mysql的 存儲過程procedure及具體案例

    存儲過程是一組為了完成特定功能的SQL語句集合,經(jīng)編譯后存儲在數(shù)據(jù)庫中,用戶通過指定存儲過程的名字和參數(shù)(如果有)來執(zhí)行它,今天通過本文給大家介紹Mysql的 存儲過程procedure及具體案例,感興趣的朋友一起看看吧
    2024-06-06
  • 企業(yè)級使用LAMP源碼安裝教程

    企業(yè)級使用LAMP源碼安裝教程

    這篇文章主要介紹了企業(yè)級使用LAMP源碼的安裝教程,本文附含源碼示例,有需要的朋友可以借鑒參考下,希望可以有所幫助,祝升職加薪
    2021-09-09
  • MySQL數(shù)據(jù)庫學(xué)習(xí)之分組函數(shù)詳解

    MySQL數(shù)據(jù)庫學(xué)習(xí)之分組函數(shù)詳解

    這篇文章主要為大家詳細介紹一下MySQL數(shù)據(jù)庫中分組函數(shù)的使用,文中的示例代碼講解詳細,對我們學(xué)習(xí)MySQL有一定幫助,需要的可以參考一下
    2022-07-07
  • Mysql悲觀鎖和樂觀鎖的使用示例

    Mysql悲觀鎖和樂觀鎖的使用示例

    這篇文章主要給大家介紹了關(guān)于Mysql悲觀鎖和樂觀鎖使用的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家學(xué)習(xí)或者使用Mysql具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-11-11
  • Tableau連接mysql數(shù)據(jù)庫的實現(xiàn)步驟

    Tableau連接mysql數(shù)據(jù)庫的實現(xiàn)步驟

    本文主要介紹了Tableau連接mysql數(shù)據(jù)庫的實現(xiàn)步驟,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-01-01
  • MySQL 5.7安裝好后打開命令行窗口閃退的解決方法

    MySQL 5.7安裝好后打開命令行窗口閃退的解決方法

    這篇文章主要給大家介紹了關(guān)于MySQL 5.7安裝好后打開命令行窗口閃退的解決方法,文中通過圖文介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起看看吧
    2018-12-12
  • MySQL 處理重復(fù)數(shù)據(jù)的方法(防止、刪除)

    MySQL 處理重復(fù)數(shù)據(jù)的方法(防止、刪除)

    這篇文章主要介紹了MySQL 處理重復(fù)數(shù)據(jù)的方法,文中示例代碼非常詳細,幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-07-07
  • mysql 操作總結(jié) INSERT和REPLACE

    mysql 操作總結(jié) INSERT和REPLACE

    用于操作數(shù)據(jù)庫的SQL一般分為兩種,一種是查詢語句,也就是我們所說的SELECT語句,另外一種就是更新語句,也叫做數(shù)據(jù)操作語句。
    2009-07-07
  • MySQL ORDER BY 的實現(xiàn)分析

    MySQL ORDER BY 的實現(xiàn)分析

    總的來說,在 MySQL 中的ORDER BY有兩種排序?qū)崿F(xiàn)方式,一種是利用有序索引獲取有序數(shù)據(jù),另一種則是通過相應(yīng)的排序算法,將取得的數(shù)據(jù)在內(nèi)存中進行排序
    2012-07-07

最新評論