คำถามติดแท็ก order-by

ประโยคที่ใช้ในคำสั่ง SQL SELECT เพื่อเรียงลำดับผลลัพธ์ของแบบสอบถาม

4
ลำดับเริ่มต้นของการบันทึกสำหรับคำสั่ง SELECT ใน MySQL คืออะไร?
สมมติว่าคุณมีตารางและข้อมูลต่อไปนี้: create table t ( k int, v int, index k(k) ) engine=memory; insert into t (k, v) values (10, 1), (10, 2), (10, 3); เมื่อออกselect * from t where k = 10โดยไม่มีorder byส่วนคำสั่ง MySQL จะเรียงลำดับระเบียนตามค่าเริ่มต้นอย่างไร

7
ทำไม ORDER BY ไม่ได้อยู่ในมุมมอง
ฉันเข้าใจ ว่าคุณ ไม่สามารถมี ORDER BYมุมมอง (อย่างน้อยใน SQL Server 2012 ฉันทำงานด้วย) ฉันยังเข้าใจว่า "ถูกต้อง" วิธีการจัดเรียงมุมมองคือการวางORDER BYรอบSELECTงบสอบถามมุมมอง แต่ด้วยความที่ค่อนข้างใหม่สำหรับ SQL เชิงปฏิบัติและมุมมองการใช้งานที่หลากหลายฉันต้องการที่จะเข้าใจว่าเพราะเหตุใดการออกแบบจึงทำเช่นนี้ หากฉันติดตามประวัติอย่างถูกต้องสิ่งนี้จะเกิดขึ้นได้ครั้งหนึ่งและถูกลบออกอย่างชัดเจนจาก SQL Server 2008 และอื่น ๆ (อย่าพูดฉันในรุ่นที่แน่นอน) อย่างไรก็ตามเหตุผลที่ดีที่สุดที่ฉันสามารถคิดได้ว่าเหตุใด Microsoft จึงลบคุณลักษณะนี้เนื่องจาก "มุมมองเป็นการรวบรวมข้อมูลที่ไม่เรียงลำดับ" ฉันถือว่ามีเหตุผลที่ดีและมีเหตุผลว่าทำไมมุมมองจึงไม่ควรถูกคัดแยก เหตุใดมุมมองจึงไม่สามารถรวบรวมข้อมูลที่แบนได้ ทำไมไม่มีการคัดแยกเฉพาะ ดูเหมือนจะไม่ยากที่จะเกิดขึ้นกับสถานการณ์ที่ (อย่างน้อยสำหรับฉัน / IMHO) ดูเหมือนว่าใช้งานง่ายอย่างสมบูรณ์แบบที่จะมีมุมมองที่เรียงลำดับ

2
ORDER BY FIELD () ใน MySQL ทำงานอย่างไรภายใน
ฉันเข้าใจว่าORDER BYประโยคทำงานอย่างไรและFIELD()ฟังก์ชั่นทำงานอย่างไร สิ่งที่ฉันต้องการเข้าใจคือการที่ทั้งคู่ทำงานร่วมกันเพื่อเรียงลำดับ มีการดึงแถวมาอย่างไรและเรียงลำดับอย่างไร +----+---------+ | id | name | +----+---------+ | 1 | stan | | 2 | kyle | | 3 | kenny | | 4 | cartman | +----+---------+ SELECT * FROM mytable WHERE id IN (3,2,1,4) ORDER BY FIELD(id,3,2,1,4) แบบสอบถามข้างต้นจะส่งผลให้ +----+---------+ | id | name | …
37 mysql  order-by  fields 

2
เรียงตามคอลัมน์ควรมีดัชนีหรือไม่
ฉันได้เพิ่มดัชนีในตารางซึ่งใช้สำหรับผลการค้นหา ฉันกำลังแสดงผลลัพธ์ตามลำดับ ASC หรือ DESC ดังนั้นคอลัมน์นั้นควรมีดัชนีหรือไม่? ฉันมีอีก 2 ดัชนีในตารางนั้น ประสิทธิภาพจะมีผลต่อการสร้างดัชนีหรือไม่สร้างดัชนีในคอลัมน์นั้น

6
จัดเรียงเร็กคอร์ดในตารางโดยพลการ
ความต้องการทั่วไปเมื่อใช้ฐานข้อมูลคือการเข้าถึงระเบียนตามลำดับ ตัวอย่างเช่นถ้าฉันมีบล็อกฉันต้องการจัดลำดับโพสต์บล็อกของฉันใหม่ตามลำดับที่กำหนดเอง รายการเหล่านี้มักจะมีความสัมพันธ์มากมายดังนั้นฐานข้อมูลเชิงสัมพันธ์จึงดูสมเหตุสมผล วิธีแก้ปัญหาทั่วไปที่ฉันได้เห็นคือการเพิ่มคอลัมน์จำนวนเต็มorder: CREATE TABLE AS your_table (id, title, sort_order) AS VALUES (0, 'Lorem ipsum', 3), (1, 'Dolor sit', 2), (2, 'Amet, consect', 0), (3, 'Elit fusce', 1); จากนั้นเราสามารถจัดเรียงแถวตามorderเพื่อรับพวกเขาในลำดับที่เหมาะสม อย่างไรก็ตามดูเหมือนว่าเงอะงะ: ถ้าฉันต้องการย้ายระเบียน 0 ไปยังจุดเริ่มต้นฉันต้องเรียงลำดับใหม่ทุกระเบียน ถ้าฉันต้องการแทรกระเบียนใหม่ที่อยู่ตรงกลางฉันต้องเรียงลำดับใหม่ทุกระเบียนหลังจากนั้น หากฉันต้องการลบบันทึกฉันต้องเรียงลำดับใหม่ทุกระเบียนหลังจากนั้น มันง่ายที่จะจินตนาการถึงสถานการณ์เช่น: สองบันทึกมีเหมือนกัน order มีช่องว่างในorderระหว่างบันทึก สิ่งเหล่านี้สามารถเกิดขึ้นได้ง่าย ๆ ด้วยเหตุผลหลายประการ นี่เป็นวิธีการที่แอพพลิเคชั่นอย่าง Joomla ใช้: คุณสามารถยืนยันได้ว่าอินเทอร์เฟซที่นี่ไม่ดีและแทนที่จะเป็นมนุษย์แก้ไขตัวเลขโดยตรงพวกเขาควรใช้ลูกศรหรือลากและวาง - และคุณอาจถูกต้อง แต่เบื้องหลังสิ่งเดียวกันกำลังเกิดขึ้น …

6
วิธีการพิสูจน์การขาดคำสั่งโดยนัยในฐานข้อมูลหรือไม่
เมื่อเร็ว ๆ นี้ฉันอธิบายให้เพื่อนร่วมงานทราบถึงความสำคัญของการมีคอลัมน์ที่จะเรียงลำดับข้อมูลในตารางฐานข้อมูลหากจำเป็นต้องทำเช่นสำหรับข้อมูลที่เรียงตามลำดับเวลา สิ่งนี้พิสูจน์ได้ค่อนข้างยากเพราะพวกเขาสามารถเรียกใช้คิวรีของพวกเขาอีกครั้งโดยไม่สิ้นสุดและจะส่งคืนชุดของแถวเดียวกันในลำดับเดียวกันเสมอ ฉันได้สังเกตสิ่งนี้มาก่อนและสิ่งที่ฉันทำได้จริงๆคือยืนยันว่าพวกเขาเชื่อใจฉันและไม่เพียงแค่คิดว่าตารางฐานข้อมูลจะทำตัวเหมือนไฟล์ CSV หรือ Excel แบบดั้งเดิม ตัวอย่างเช่นการดำเนินการแบบสอบถาม (PostgreSQL) create table mytable ( id INTEGER PRIMARY KEY, data TEXT ); INSERT INTO mytable VALUES (0, 'a'), (1, 'b'), (2, 'c'), (3, 'd'), (4, 'e'), (5, 'f'), (6, 'g'), (7, 'h'), (8, 'i'), (9, 'j'); จะสร้างตารางที่มีลำดับความคิดที่ชัดเจน การเลือกข้อมูลเดียวกันด้วยวิธีที่ง่ายที่สุดคือ: SELECT * …

3
ลำดับชั้นต้นไม้พ่อแม่และลูก
ฉันต้องติดตามข้อมูลใน SQL Server 2008 R2 SQLFiddle schema: สร้างตาราง [dbo] [ICFilters] ( [ICFilterID] [int] ตัวตน (1,1) ไม่เป็นโมฆะ [ParentID] [int] ไม่เสียค่าเริ่มต้น 0 [FilterDesc] [varchar] (50) ไม่เป็นโมฆะ [ใช้งาน] [tinyint] ไม่เป็นค่าเริ่มต้น 1 CONSTRAINT [PK_ICFilters] คีย์หลักที่คลัสเตอร์ ([ICFilterID] ASC) พร้อม PAD_INDEX = ปิด STATISTICS_NORECOMPUTE = OFF IGNORE_DUP_KEY = ปิด ALLOW_ROW_LOCKS = เปิด ALLOW_PAGE_LOCKS = เปิด ) …

2
Postgres รักษาลำดับการแทรกของระเบียนหรือไม่
ตัวอย่างเช่นเมื่อฉันใช้การสืบค้นซึ่งจะส่งกลับรหัสบันทึก INSERT INTO projects(name) VALUES (name1), (name2), (name3) returning id; ซึ่งผลิตผลผลิต: 1 2 3 รหัสนี้จะชี้ไปที่ค่าแทรกที่สอดคล้องกันหรือไม่ 1 -> name1 2 -> name2 3 -> name3

2
ดัชนีต้องครอบคลุมคอลัมน์ที่เลือกทั้งหมดเพื่อให้ ORDER BY ใช้หรือไม่
เมื่อเร็ว ๆ นี้ที่บางคนถามว่าทำไมไม่สั่งโดยใช้ดัชนี? สถานการณ์เกี่ยวข้องกับตาราง InnoDB อย่างง่ายใน MySQL ประกอบด้วยสามคอลัมน์และ 10k แถว หนึ่งในคอลัมน์เป็นจำนวนเต็มถูกทำดัชนี - และ OP พยายามดึงตารางทั้งหมดของเขาที่เรียงลำดับในคอลัมน์นั้น: SELECT * FROM person ORDER BY age เขาแนบEXPLAINเอาท์พุทแสดงว่าแบบสอบถามนี้ได้รับการแก้ไขด้วยfilesort(แทนที่จะเป็นดัชนี) และถามว่าทำไมจึงเป็นเช่นนั้น แม้จะมีคำใบ้ FORCE INDEX FOR ORDER BY (age) ที่ก่อให้เกิดดัชนีที่จะใช้ , คนตอบ (กับการสนับสนุนความเห็น / upvotes จากคนอื่น ๆ ) ว่าดัชนีจะใช้เฉพาะสำหรับการเรียงลำดับเมื่อคอลัมน์ที่เลือกจะอ่านทั้งหมดจากดัชนี (เช่นเป็นปกติจะระบุโดยUsing indexในExtraคอลัมน์ ของEXPLAINเอาท์พุท) คำอธิบายที่ได้รับในภายหลังว่าภายในดัชนีแล้วเรียกคอลัมน์จากผลตารางในการสุ่ม I / O filesortซึ่งมุมมองที่เป็นราคาแพงกว่า สิ่งนี้ดูเหมือนจะปรากฏในหน้าของบทที่เกี่ยวกับORDER …
15 mysql  index  innodb  order-by 


1
ฉันจะจัดเรียงผลลัพธ์ของข้อความค้นหาแบบเรียกซ้ำในลักษณะคล้ายต้นไม้แบบขยายได้อย่างไร
สมมติว่าคุณมีnodesตารางแบบนี้: CREATE TABLE nodes ( node serial PRIMARY KEY, parent integer NULL REFERENCES nodes(node), ts timestamp NOT NULL DEFAULT now() ); มันแสดงให้เห็นถึงโครงสร้างต้นไม้เหมือนโหนดมาตรฐานที่มีรูตโหนดที่ด้านบนและโหนดเด็กหลายห้อยจากโหนดรูทหรือโหนดเด็กอื่น ๆ ให้เราแทรกค่าตัวอย่างสองสามค่า: INSERT INTO nodes (parent) VALUES (NULL), (NULL), (NULL), (NULL), (1), (1), (1), (1), (6), (1) , (6), (9), (6), (6), (3), (3), (3), (15); ตอนนี้ฉันต้องการเรียกรูต 10 …

3
ตัวเลือกสำหรับคำสั่ง ORDER BY ในมุมมองคืออะไร
คำถามนี้ต้องอยู่ในเว็บไซต์นี้ :) ORDER BY ถูกห้ามไม่ให้ใช้ในมุมมองตามที่ฉันเข้าใจเนื่องจากความเป็นไปได้ในการสั่งซื้อหลายครั้งด้วยเมื่อใช้มุมมองนี้ ฉันรู้ว่ามีวิธีการข้ามข้อ จำกัด นี้ตัวอย่างเช่นTOP 99.999999 PERCENTแต่ฉันอยากจะรู้ว่าอะไรคือวิธีปฏิบัติที่ดีที่สุดไม่ใช่วิธีที่จะแฮ็ก ดังนั้นถ้าฉันต้องการสร้างมุมมองในฐานข้อมูลของฉันสำหรับใช้ส่วนตัวหมายถึงฉันต้องการเชื่อมต่อกับฐานข้อมูลและดูข้อมูลที่ได้รับการแก้ไขและเรียงลำดับฉันจะทำอย่างไรถ้าฉันไม่สามารถสั่งซื้อมุมมองได้? ขณะนี้ใน SQL Server DB ของฉันฉันมีมุมมองกับการTOPแฮ็กและฉันใช้มันเยอะ แต่ก็รู้สึกผิด

4
เป็นไปได้หรือไม่ว่าคำสั่งนั้นจะไม่รับประกันสำหรับตารางที่ซ้ำซ้อนนี้
ฉัน stumbled เมื่อคำถามนี้ในการสนทนา Twitter กับ Lukas เอ๊ด แม้ว่าพฤติกรรมที่ถูกต้องจะใช้คำสั่งย่อย ORDER BY กับการสืบค้นนอกสุดเนื่องจากที่นี่เราไม่ได้ใช้ DISTINCT, GROUP BY, JOIN หรือส่วนคำสั่ง WHERE ใด ๆ ในการค้นหานอกสุดทำไม RDBMS ถึงไม่ผ่าน ข้อมูลที่เข้ามาในขณะที่มันถูกจัดเรียงตามแบบสอบถามภายใน? SELECT * FROM ( SELECT * FROM table ORDER BY time DESC ) AS t เมื่อเรียกใช้ตัวอย่างนี้บน PostgreSQL อย่างน้อยคุณจะได้รับแผนการดำเนินการเดียวกันสำหรับทั้งแบบสอบถามภายในและตัวอย่างตารางที่ได้รับนี้รวมถึงชุดผลลัพธ์เดียวกัน ดังนั้นฉันจะสมมติว่าผู้วางแผนจะยกเลิกการสืบค้นนอกสุดเพียงเพราะซ้ำซ้อนหรือเพียงแค่ส่งผ่านผลลัพธ์จากตารางด้านใน ไม่มีใครคิดว่านี่อาจเป็นกรณีหรือไม่

2
MySQL ไม่ได้ใช้ดัชนีเมื่อเข้าร่วมกับตารางอื่น
ฉันมีสองตารางตารางแรกประกอบด้วยบทความ / บล็อกโพสต์ทั้งหมดภายใน CMS บทความเหล่านี้บางส่วนอาจปรากฏในนิตยสารซึ่งในกรณีนี้พวกเขามีความสัมพันธ์กับต่างประเทศที่สำคัญกับตารางอื่นที่มีข้อมูลเฉพาะของนิตยสาร นี่คือเวอร์ชันที่เรียบง่ายของไวยากรณ์การสร้างตารางสำหรับสองตารางเหล่านี้ที่มีแถวที่ไม่จำเป็นออกมา: CREATE TABLE `base_article` ( `id` int(11) NOT NULL AUTO_INCREMENT, `date_published` datetime DEFAULT NULL, `title` varchar(255) NOT NULL, `description` text, `content` longtext, `is_published` int(11) NOT NULL DEFAULT '0', PRIMARY KEY (`id`), KEY `base_article_date_published` (`date_published`), KEY `base_article_is_published` (`is_published`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1; CREATE TABLE `mag_article` ( …

3
คำแนะนำ NOLOCK เปลี่ยนลำดับของบันทึกที่ส่งคืน
มีดัชนีคลัสเตอร์บนโต๊ะเป็นฟิลด์ClientLastName เมื่อฉันเพียงแค่ถ่ายโอนข้อมูลทั้งหมดจากตารางข้อมูลเหล่านั้นจะปรากฏตามลำดับตัวอักษรเว้นแต่(nolock)จะมีการใช้คำใบ้ในแบบสอบถามที่เป็นปัญหา คำใบ้นั้นเปลี่ยนลำดับของบันทึก ควรเป็น?. ฉันมั่นใจว่าไม่มีเซสชันอื่นที่มีธุรกรรมเปิดที่มีการเปลี่ยนแปลงในตารางนั้น (อย่างน้อยsp_who2ก็ไม่แสดงให้ฉันเห็น) ความแตกต่างในการสั่งซื้อสามารถอธิบายได้อย่างไร ดึงข้อมูลเพิ่มเติมจากความคิดเห็น: ไม่มีคำสั่งซื้อโดย ดัชนีที่ไม่ใช่คลัสเตอร์ควรบังคับใช้คำสั่งหรือไม่ คิวรียังคงส่งคืนคำสั่งซื้อที่แตกต่างกันแม้ว่าจะใช้คำใบ้ดัชนีที่ระบุดัชนีคลัสเตอร์ พวกเขาควร? ฉันสงสัยว่าทำไมnolockการเปลี่ยนแปลงลำดับของระเบียนที่ส่งคืนโดยไม่มีการเปลี่ยนแปลงแผน ฉันทำ WinDiff กับพวกเขา - เหมือนกันยกเว้น [the] (nolock)[คำใบ้แบบสอบถาม]

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.