BMS-HOSxP Community

HOSxP => แจ้งปัญหา / ขอความช่วยเหลือ => ข้อความที่เริ่มโดย: anukul ที่ มกราคม 11, 2008, 17:07:53 PM

หัวข้อ: ฝาก อ.อ๊อด Lab_head ต้องการเพิ่ม index 'lab_receive_number' ได้มั๊ย
เริ่มหัวข้อโดย: anukul ที่ มกราคม 11, 2008, 17:07:53 PM
พอดีทาง RAX(LIS) กำลังทำการเชื่อมต่อกับ HOSxP อยู่ แต่พบปัญหาว่า มีการส่ง request จาก LIS ทุก 1 นาที เพื่อไปดู lab request ใหม่ที่มีการรับ lab แล้ว เพื่อนำมาส่งต่อให้ LIS   --> ทำให้ระบบ HOSxP ช้าลงทุกครั้งที่ส่ง request

พบว่า คำสั่ง SQL --> 'SELECT * FROM lab_head JOIN patient ON lab_head.hn=patient.hn WHERE lab_receive_number>" & sLastRecord & " ORDER BY lab_receive_number LIMIT 1'

พอมาดูที่ HOSxP พบว่า lab_receive_number ไม่ได้ทำ index ไว้ คิดว่าอาจเป็นปัญหาให้ระบบช้าลง

ขอสอบถาม ว่า จะเกิดจากปัญหาอะไรได้?  และสามารถเพิ่ม index ใน field นี้ได้เลยมั๊ยครับ  ที่สำคัญ ใช้คำสั่งอะไรครับ  (จำไม่ได้ กลัวมีปัญหา)

ลอง show create table ดู เป็นอย่างข้างล่างครับ

CREATE TABLE `lab_head` (
  `lab_order_number` int(11) NOT NULL default '0',
  `doctor_code` varchar(7) default NULL,
  `lab_items_group_code` int(11) default NULL,
  `vn` varchar(13) default NULL,
  `lab_head_remark` varchar(250) default NULL,
  `hn` varchar(9) default NULL,
  `order_date` date default NULL,
  `report_date` date default NULL,
  `reporter_name` varchar(100) default NULL,
  `report_time` time default NULL,
  `confirm_specimen` char(1) default NULL,
  `confirm_report` char(1) default NULL,
  `department` varchar(5) default NULL,
  `form_name` varchar(200) default NULL,
  `sub_group_list` varchar(200) default NULL,
  `order_time` time default NULL,
  `receive_date` date default NULL,
  `receive_time` time default NULL,
  `ward` char(2) default NULL,
  `result_note` text,
  `lock_result` char(1) default NULL,
  `result_rtf` longtext,
  `order_note` text,
  `lab_receive_number` int(11) default NULL,
  `approve_staff` varchar(25) default NULL,
  `anonymous` char(1) default NULL,
  `appointment` char(1) default NULL,
  `appointment_date` date default NULL,
  `appointment_time` time default NULL,
  `lis_order_no` varchar(25) default NULL,
  `confirm_charge_money` char(1) default NULL,
  `finance_lab_confirm` char(1) default NULL,
  `lab_order_number_guid` varchar(38) default NULL,
  `anonymous_request` char(1) default NULL,
  `clinic` char(3) default NULL,
  `send_to_cashier` char(1) default NULL,
  `receive_computer` varchar(25) default NULL,
  PRIMARY KEY  (`lab_order_number`),
  KEY `confirm_specimen` (`confirm_specimen`),
  KEY `hn` (`hn`),
  KEY `vn` (`vn`),
  KEY `ix_order_date` (`order_date`)
) ENGINE=MyISAM DEFAULT CHARSET=tis620
หัวข้อ: Re: ฝาก อ.อ๊อด Lab_head ต้องการเพิ่ม index 'lab_receive_number' ได้มั๊ย
เริ่มหัวข้อโดย: doramon ที่ มกราคม 11, 2008, 17:19:51 PM
กำลังดูให้ครับ


ตัวอย่างครับ 

create index ix_hn_regdate on an_stat (hn,regdate)
หัวข้อ: Re: ฝาก อ.อ๊อด Lab_head ต้องการเพิ่ม index 'lab_receive_number' ได้มั๊ย
เริ่มหัวข้อโดย: anukul ที่ มกราคม 11, 2008, 18:07:29 PM
ทดลองสร้าง index เรียบร้อยแล้วครับ  แต่พบว่า พอเรียก SQL นี้ ต้องใช้เวลานานเช่นเดิม (ไม่แน่ใจว่าเร็วขึ้นเล็กน้อยหรือเปล่าครับ)  ใช้เวลา exec time ประมาณ เกือบ 30,000   

ไม่รู้ว่าพอมีวิธีอื่นทำให้สามารถเรียกข้อมูลได้เร็วกว่านี้มั๊ยครับ

 :)
หัวข้อ: Re: ฝาก อ.อ๊อด Lab_head ต้องการเพิ่ม index 'lab_receive_number' ได้มั๊ย
เริ่มหัวข้อโดย: anukul ที่ มกราคม 11, 2008, 18:11:09 PM
ลองใช้ SQL ที่ระบุ lab_receive_number ลำดับต่อไป รู้สึกว่าจะเร็วขึ้นมาก 

SELECT * FROM lab_head JOIN patient ON lab_head.hn=patient.hn WHERE lab_receive_number='1027'

ใช้เวลา exec time ~ 15

วันจันทร์จะลองคุยกับ Programer LIS ว่าสามารถปรับคำสั่ง SQL ได้มั๊ย